当前位置: 首页 > 知识库问答 >
问题:

React useState覆盖状态对象,而不是合并[duplicate]

岳毅
2023-03-14

React没有合并我对状态对象所做的更改,而是完全覆盖它。

这可能是由上下文引起的吗?我不确定是否可以直接作为道具传递分派事件。我尝试过在另一个函数中包装setParams,比如在“提升状态”文档中,但是没有效果。

预期产量

{width: 400, height: 400, strokeWeight: 0.25, color: "#d9eb37", resolution: 10}

电流输出

{color: "#d9eb37"}

React上下文保存状态

const Context = createContext();

const Provider = ({ children }) => {
  const [params, setParams] = useState({
    width: 400,
    height: 400,
    strokeWeight: 0.25,
    color: "#ad3e00",
    resolution: 10
  });

  return (
    <Context.Provider value={{ params, setParams }}>
      {children}
    </Context.Provider>
  );
};

通用输入组件

const Input = () => {
  const { params, setParams } = useContext(Context);

  render(
    <input
        type="color"
        value={params.color}
        onChange={(e) => setParams({ color: e.target.value })}
      />
  );
}

共有1个答案

荀振国
2023-03-14

useState不会像类组件中的setState那样合并状态,你必须自己完成这项工作。

onChange={(e)=

 类似资料:
  • 问题内容: 我对react.js还是很陌生,并且正在通过构建砌体样式布局进行试验。 我将每个元素呈现给DOM,然后需要遍历每个项目并根据前面的元素应用x和y位置。 初始模型如下所示: (我只显示了一个项目以使内容简短)。 完成循环并获取x和y数据后,我想将其应用于podStyle对象。我用以下数据调用setState: 这似乎从模型中删除了所有当前数据,而只剩下了podStyle数据。我是否误解了

  • 问题内容: 我有以下代码: 我想用新内容替换文件中的旧内容。但是,当我执行代码时,将附加文件“ test.xml”,即,我的旧内容被新的“替换”内容所取代。为了删除旧内容而只保留新内容,我该怎么办? 问题答案: 您需要先写入文件的开头,然后再使用(如果要进行就地替换): 另一种方法是读取文件,然后使用再次打开它: 无论是也将改变inode的文件的数量(我测试过两次,一次是与Ubuntu 12.04

  • 问题内容: 因此,我一直在为编程类编写抽象作业,但遇到了问题。我现在的目标是能够使用抽象,然后能够使用矩形和椭圆形绘制一个简单的城市,例如矩形建筑物或灯柱上的椭圆形灯。 我在编译时收到的错误是:MyTestApp.Rectangle不是抽象的,并且不会覆盖MyTestApp.Shape中的抽象方法drawEllipse(java.awt.Graphics)。该错误显示在类Shape下方的“矩形扩展

  • 请帮帮忙!!我一直在到处寻找,但没有得到答案 错误:MainApplication不是抽象的,并且不覆盖抽象方法 环境 android/build.gradle系统 App/build.gradle 我的主应用程序 错误: 任务:app:compileDebugJavaWithJavac C:\Users\user\Downloads\Scripts\kantongin mobile\trader

  • 我有一个方法应该用新内容覆盖当前文件,但是FileWriter()只是附加新内容,而不是覆盖旧内容。 这是我的FileWriter的设置方式 这是保存方法 当我运行此方法时会出现问题,它没有覆盖文件,而是将新内容附加到文件中。 我想要的: 发生了什么:

  • 假设我定义了一个插件,如下所示: 在当地的一个建筑里。Gradle,我写 我希望合并两个buildscript部分,以便在插件中定义存储库,在build.gradle中定义依赖项,但似乎本地声明重写了插件,我最终出现了一个错误,指示“没有定义存储库”。 如果我通过配置注入从顶层构建。Gradle,结果是一样的吗? 也许正确的解决方案是让插件提供一个ext闭包来定义useMyRepos(),类似于m