Reactjs 如何在单击列表后更改其元素

Reactjs 如何在单击列表后更改其元素,reactjs,react-native,Reactjs,React Native,我对reactJS和ReactNative都是新手。我需要建议。 我很难理解如何创建列表元素的工作动作 所以。我有一个在scrollView中创建任务的父组件 <ScrollView> {this.state.tasks.map(function(ele) { return ( <Task action={this.handler}

我对reactJS和ReactNative都是新手。我需要建议。 我很难理解如何创建列表元素的工作动作

所以。我有一个在scrollView中创建任务的父组件

        <ScrollView>
          {this.state.tasks.map(function(ele) {
            return (
              <Task
                action={this.handler}
                key={ele.id}
                title={ele.title}
                subtitle={ele.subtitle}
                state={ele.state}
              />
            );
          })}
        </ScrollView>
如果单击了特定任务,我想将状态更改为1。我试着通过这样做来实现:
但这不起作用。

据我所知,您希望为特定任务更新任务中的“状态”属性。在处理程序中,可以执行以下操作:

handler(ele) {
  let updatedTasks = this.state.tasks.map((task)=> {
     if(ele.id === task.id) {
        return Object.assign({}, task, {
          state: 1
        });
      } else {
        return task;
      }
   })

  //Set the new state
  this.setState({
     tasks: updatedTasks
  })
}
在ScrollView中,操作应为:

 action={(ele) => this.handler(ele)}

您没有提供太多的上下文,但基本上它应该足以在
处理程序
调用中提供特定任务的
id
,或者在较低的
task
组件级别提供它,或者在创建元素时绑定它(通过执行以下操作:

action={this.handler.bind(this,ele.id)}

,之后在
任务
级别调用
处理程序()
已包含正确的id


然后在你的
处理程序
方法中,你手头有
id
,然后可以在你的状态中修改适当的任务。以一种干净的方式这样做有点烦人-你必须使用旧的任务列表并创建一个修改了适当任务的新列表。之后,你可以使用
This.setState(newTaskList)修改状态

需要查看更多代码-这是为了方便起见的缩写格式吗?在ScrollView组件中声明了处理程序的位置吗?@Mikkel除此之外没有太多代码,我应该粘贴子(任务)组件的代码,还是我的“胡乱寻找解决方案”版本?谢谢你的回答,但我还有一个小问题。添加这行:“action={this.handler.bind(this,ele.id)}”create error“Unfind不是对象(计算'this.handler.bind')很好的一点-这是因为它位于匿名函数内部,
实际上并不指您认为它所指的内容,它指的是非常空的函数上下文。您需要在函数外部引用原始的
var self=this
,然后参考
self
),或者进一步思考,这可能是您面临的核心问题。这是React开发中的一个非常基本且不平凡的问题-例如,请参阅。谢谢,我会尝试一下。我仍然对javascript中的许多内容感到困惑,因为安卓开发人员尝试了您的解决方案。但元素没有任何变化。状态更改应导致状态c挂起此列表的元素。因此,可能它正在工作,但我在其他地方分解了我的代码,我将进一步调查。我必须先找到如何记录一些信息。
 action={(ele) => this.handler(ele)}