Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Javascript React:根据textarea输入将状态设置为数组_Javascript_Reactjs_Setstate - Fatal编程技术网

Javascript React:根据textarea输入将状态设置为数组

Javascript React:根据textarea输入将状态设置为数组,javascript,reactjs,setstate,Javascript,Reactjs,Setstate,我正试图根据textarea的输入设置功能的状态,这是一个数组。我没有运气设置功能的状态。当我按下一个键时,该键将成为状态中的下一个索引值。如果我点击另一个键,该键将成为状态中的下一个索引值。因此,如果我手动将功能的初始状态设置为features:[“First”、“Second”、“Third”],,结果将是功能:[“First”、“Second”、“Third”、“Firstf”、“Firstd”] 有关国家 class CreateItem extends Component { st

我正试图根据textarea的输入设置功能的状态,这是一个数组。我没有运气设置功能的状态。当我按下一个键时,该键将成为状态中的下一个索引值。如果我点击另一个键,该键将成为状态中的下一个索引值。因此,如果我手动将功能的初始状态设置为
features:[“First”、“Second”、“Third”],
,结果将是
功能:[“First”、“Second”、“Third”、“Firstf”、“Firstd”]

有关国家

class CreateItem extends Component {
  state = {
    features: [""],
  };
这就是我试图基于状态创建textarea的方式

                <label htmlFor="features">
                  Features
                  {this.state.features.map((feature, i) => (
                    <div key={i}>
                      <textarea
                        key={i}
                        type="features"
                        placeholder={`${feature}`}
                        name={`features.${i}`}
                        value={this.state.features[`${i}`]}
                        onChange={this.handleFeatureArrayChange}
                        onKeyDown={this.keyPress}
                      />
                    </div>
                  ))}
                </label>
这就是每次用户点击enter时我试图创建新textarea的方式:

  keyPress = e => {
    if (e.keyCode == 13) {
      this.setState({
        features: this.state.features.concat("")
      });
    }
  };

问题是,每次按下一个键时,您都只是附加到状态

handleFeatureArrayChange=e=>{
常量{name,type,value}=e.target;
this.setState(prevState=>({
[名称]:[…prevState.features,value]//这实际上与.concat(value)相同
}));
};
您希望更新当前索引处的值。尝试将输入的名称更改为仅为
key
,然后改为映射

handleFeatureArrayChange=e=>{
常量{name,type,value}=e.target;
this.setState(prevState=>({
特征:prevState.features.map((专长,关键)=>{
如果(键==名称){
返回值
}否则
回归功绩;
}
)
}));
};

什么东西不走运?您为两个不同的操作提供了功能。两者都不起作用吗?有吗?有错误吗?您实际收到的输出与您期望的输出相比是什么?这一点很好。非常感谢。我没有运气设置功能的状态。当我按下一个键时,该键将成为状态中的下一个索引值。如果我点击另一个键,该键将成为状态中的下一个索引值。因此,如果我手动将功能的初始状态设置为
功能:[“第一”、“第二”、“第三”],
,结果将是
功能:[“第一”、“第二”、“第三”、“第一个f”、“第一个D”]
,如果我按了f,然后你按了。非常感谢你,布莱恩!我会研究你的答案,因为我显然还没有完全理解你的回答。再次非常感谢!不客气。这个问题实际上更多的是关于JavaScript数组和扩展语法如何工作,而不是setState本身。无可否认,这是令人困惑的,因为有太多的方法可以使用,而且很难记住哪些方法发生了变异,哪些方法返回了新的。有些甚至返回已删除的索引或数组的新长度。我经常引用文档,以确保我记得正确。解决了同样的问题,一些更详细的答案可能会让事情更清楚。
  keyPress = e => {
    if (e.keyCode == 13) {
      this.setState({
        features: this.state.features.concat("")
      });
    }
  };