我有状态存储数组,例如['X','XL'],但是我的代码无法正常工作,我不知道为什么吗?
class App extends Component {
state = {
shirtsSize: ['X', 'XL']
}
handleChange = index => e => {
const { shirtsSize } = this.state
this.setState({
[`${shirtsSize[index]}`]: e.target.value
})
}
render() {
const { shirtsSize } = this.state
return (
<div className="App">
<label htmlFor="shirtsSize">Sizes</label>
<button>+</button>
{shirtsSize.map((lang, index) => (
<input
type="text"
name="shirtsSize"
id="shirtsSize"
value={lang}
onChange={this.handleChange(index)}
/>
))}
</div>
)
}
}
无法找出错误所在。
答案 0 :(得分:1)
使用
this.setState({
[`${shirtsSize[index]}`]: e.target.value
})
您不是在更新shirtSize
数组中的数据,而是创建一个新的密钥,例如shortsSize[0]
,依此类推。您需要像这样更新数组
const value = e.target.value;
this.setState(prevState => ({
shirtsSize: [...prevState.shirtsSize.slice(0, index), value, ...prevState.shirtsSize.slice(index + 1) ]
}))
或者简单地
const shirtsSize = [...this.state.shirtsSize];
shirtsSize[index] = e.target.value
this.setState({
shirtsSize
})
答案 1 :(得分:0)
似乎您需要像这样的东西:
handleChange = index => e => {
const {shirtsSize} = this.state
shirtsSize[index] = e.target.value
this.setState({shirtsSize: shirtsSize.slice()})
}