Javascript React:根据textarea输入将状态设置为数组
我正试图根据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
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("")
});
}
};