如何创建一个可重用的函数来设置变量对象属性的状态?

Posted

技术标签:

【中文标题】如何创建一个可重用的函数来设置变量对象属性的状态?【英文标题】:How can I create a reusable function that will setState for a variable object property? 【发布时间】:2020-01-01 17:23:32 【问题描述】:

我有一个 onChange 函数来更新我所有表单输入的状态。我在这里尝试更新的状态作为对象嵌套在数组中,但我不确定如何创建一个可重用的函数,该函数将根据更改的表单输入更新特定的对象属性。

这是我的功能:

onChangeHandler = (e, index) => 
  let currentStateObject = [...this.state.fundGroups]; //copying the current state

  // This works, but I don't want allocationName to be hardcoded. 
  // How can I pass in a variable that relates to the specific property 
  // based on which input field is changed?
  currentStateObject[index].allocationName = e.target.value; 
  this.setState(
    currentStateObject
  );

这是我尝试过的,但它不起作用并用无效的令牌消息破坏了我的代码:

currentStateObject[index].[e.target.name] = e.target.

我尝试这样做是因为在我的输入字段中,我添加了name="allocationName"

有谁知道我是否即将解决这个问题?我对 React 很陌生。谢谢。

【问题讨论】:

为什么这个问题的票数接近? 【参考方案1】:

你几乎明白了。只需删除 [index][e.target.name] 之间的 . 即可:

currentStateObject[index][e.target.name] = e.target.value;

【讨论】:

我要用键盘敲自己的头。太感谢了。我会试试这个。 对 OP 的当前代码进行另一项更改以使其正常工作是执行this.setState( fundGroups: currentStateObject )【参考方案2】:

这里是一些状态操作的例子

state = 
    random: [],
    counter: 1
  


  stateHandler = (e)=>
    let oldrandom = [...this.state.random]
    oldrandom[e.target.name] = e.target.value;
    this.setState(random:oldrandom )
  




manipulate state with a functional approach

 stateHandler = ()=>
        this.setState((state,props)=>
          counter: state.counter+props.increment
       )
      

【讨论】:

【参考方案3】:

你可以简单地:

onChangeHandler(event) 
   this.setState( [event.target.name]: event.target.value )

【讨论】:

这通常有效,但正如我在他的代码中看到的那样,他还使用index 来处理。 :) 这没有意义tbh :) 此代码未指定我正在编辑数组中的哪个项目。 其实,你可以试试这段代码。

以上是关于如何创建一个可重用的函数来设置变量对象属性的状态?的主要内容,如果未能解决你的问题,请参考以下文章

Vuex 可重用模块模式。使用状态功能不起作用

LayaBox---TypeScript---举例

如何设置特定的变量名?

如何在 Vue.js 中访问可重用组件的其他实例的状态

类的属性

动手动脑