react 实现元素的增删功能
在初次开发过程中遇到这样一个问题,动态添加input输入框,刚开始直接用push方法添加,然后再用setState更新,结果无效,后来查了资料,是这样说的:
不要直接改变state 直接对组件state中的属性赋值将不会触发DOM更新,因为React并不知道state被改变了
state的更新可能是异步的 React会一次处理多个对setState的调用以提高性能,所以调用setState()时不应当直接基于另外一些来自state或props中的属性进行计算,很有可能当前计算的值并不是最终的值,当用于计算的另一些值再次变化后,React并不会刷新DOM(因为没有再次调用setState())。为了修正这点,React提供另一种调用setState()函数的方式:传入一个函数,而不是对象
后边就写了这样一个增加的方法,实现了该功能。
// 增加输入框
addItem=()=>{
const obj = { input1:'',input2:'',id:Math.random()}
this.setState(prevState =>({
inputList:prevState.inputList.concat(obj)
}))
}
同样在删除的时候也遇到了问题,我使用splice方法根据索引index进行删除,结果不对,后边采用了这种方法:
removePic(index) {
this.setState({
files: this.state.files.filter((_, i) => i !== index)
})
}