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