javascript - 用变量传播 prevState

标签 javascript reactjs ecmascript-6

我正在尝试重构代码库,但我陷入了困境。我基本上是尝试根据选择框的 onChange 事件更新状态。

在本例中,handleFilterChange 函数中的 searchCriteria 参数是 ingredients

但假设我有另一个选择框,其中包含anotherIngredients 的选项。我无法根据变量传播 prevState

我必须输入...prevState.ingredients

有正确的方法吗?

所以我的组件状态是:

 state = {
    ingredients: {
      name: "",
      operation: "",
      value: ""
    },
  anotherIngredients: {
      name: "",
      operation: "",
      value: ""
    }
  };

我的处理程序是:

handleFilterChange = (event, searchCriteria, searchCriteriaKey) => {
    let newValue = event.target.value;
    this.setState(prevState => ({
      [searchCriteria]: {
        ...prevState.ingredients,
        [searchCriteriaKey]: newValue
      }
    }));
  };

我的选择框组件是:

<Select
  value={ingredients.name}
  options={[
            { key: "", value: "Please choose an ingredient" },
            { key: "ingredient1", value: "INGREDIENT 1" },
            { key: "ingredient2", value: "INGREDIENT 2" },
            { key: "ingredient3", value: "INGREDIENT 3" },
            { key: "ingredient4", value: "INGREDIENT 4" }
           ]}
           changeHandler={event =>
            this.handleFilterChange(event, "ingredients", "name")
           }
 />

希望我能解释一下自己。谢谢!

最佳答案

您应该重用变量 searchCriteria 从状态中提取以前的值。

handleFilterChange = (event, searchCriteria, searchCriteriaKey) => {
    let newValue = event.target.value;
    this.setState(prevState => ({
        [searchCriteria]: {
            ...prevState[searchCriteria],
            [searchCriteriaKey]: newValue
        }
    }));
};

关于javascript - 用变量传播 prevState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60522000/

相关文章:

javascript - 在 Promise 回调中使用参数时,无法将参数传递给类方法

javascript - 重构并干燥 jQuery 代码

javascript - 使用 jQuery 和 HTML 动态创建标签并使用 jQuery 访问其文本值

javascript - vue-good-table 日期格式 2019-02-26T02 :11:56. 308466-08:00

javascript - react .js : onChange event for contentEditable

javascript - 添加 js 库以响应组件

reactjs - 我是否错误地安装了 create-react-app?

javascript - validity.rangeUnderflow 不起作用

javascript - 如何在node.js中使用ecma6(typescript)将Map解析为json

javascript - 我应该如何在 JavaScript 中实例化这个日期?