Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何设置列表中的项目状态_Reactjs - Fatal编程技术网

Reactjs 如何设置列表中的项目状态

Reactjs 如何设置列表中的项目状态,reactjs,Reactjs,我有一个列表,只想设置eventhandler上的第二项。我试图使用lists:this.state.lists[1]进行设置,但它抛出一个错误,表示this.state.lists.map不是函数。设置列表中项目的正确方式是什么?以下是我正在做的: constructor(props) { super(props); this.state = { lists: [] }; this.buttonAHandler = this.buttonAHan

我有一个列表,只想设置eventhandler上的第二项。我试图使用
lists:this.state.lists[1]
进行设置,但它抛出一个错误,表示
this.state.lists.map不是函数。设置列表中项目的正确方式是什么?以下是我正在做的:

  constructor(props) {
    super(props);
    this.state = {
      lists: []
    };
    this.buttonAHandler = this.buttonAHandler.bind(this);
  }


 componentDidMount() {
    fetch('https://api.com')
    .then(response => response.json())
    .then(data => this.setState({ lists: data }));
 }



  buttonAHandler(e) {
    this.setState({
    lists: this.state.lists[1]
   })
  }
在渲染返回中,我像这样绑定处理程序:

render(){
    return (
      <div> 

     <button onClick={this.buttonAHandler.bind(this)} >see pets</button>
render(){
返回(
看宠物

您收到一个错误,因为单击后,
列表
状态从
数组
更改为
对象
(数组的索引1)。因此,如果仍要使用
map()
方法,请将处理程序更改为:

buttonAHandler(e) {
   this.setState({
       lists: [this.state.lists[1]]
   })
}

然后,新的
列表
状态将是一个
数组
,其中只包含您想要的元素。

您所说的“只想设置第二项”是什么意思?是否要删除数组中除第2个元素以外的所有项目,或者是否要更改第2个元素中的某些内容?是的,我有项目列表,单击按钮时,我只想设置第2个元素的状态。抱歉,我仍然不明白您的意思。您能否详细说明如何“仅设置第2个元素的状态”?@Deke没有说明你想做什么。你想让
列表
保持一个数组,但更新数组中的一个项目,还是想
列表
成为数组中的项目并扔掉其余的项目?假设this.state.lists是[{a:“abc”},{b:“def”}],单击按钮时,我想将状态设置为第二项,即
{b:“def”}
@mhodges,可能是
映射()
被用来渲染数据。然后,在从
数组
更改为
Òobject
之后,这就不可能了。是的,正是我所想的。看起来OP只是在上面的注释中被弄糊涂了。你的解决方案就是他们所寻找的-删除我以前的注释,因为它现在已经过时了