【发布时间】:2019-11-09 21:42:38
【问题描述】:
我正在尝试使用 React 和 JSX 制作一个简单的页面,该页面将生成几个输入字段,可以通过单击按钮将其删除。
我目前正在页面状态中存储一个空数组,该数组由 addItems 函数更新。
由于某种原因,我无法使用 clear 函数清除数组。我知道setState 是异步的,但我的数组永远不会更新也永远不会消失。
"use strict";
function Node(props) {
return(<div>
<input type="text" placeholder="input here"></input>
</div>);
}
class Page extends React.Component {
constructor(props) {
super(props);
this.state = {
arr: [],
thresh: 5,
del: "Delete",
};
this.addItem = this.addItem.bind(this);
this.clear = this.clear.bind(this);
}
addItem = (index, array) => {
if (index == this.state.thresh) {
this.setState((state, props) => ({
arr: array,
}));
return;
}
index++;
array.push(<Node key={index} />);
this.addItem(index, array);
};
clear = newArr => {
this.setState({
arr: newArr,
}, () => { console.log(this.state.arr) });
};
render() {
return(<div id="wrapper onClick={() => {this.addItem(0,[])}}>
<div id="fields">
{this.state.arr}
</div>
<button onClick={() => {this.clear([])}}>{this.state.del}</button>
</div>
}
}
ReactDOM.render(<Page />, document.getElementById("root"));
我希望当我点击删除按钮时,数组将被一个空数组覆盖,但这不会发生。我可能做错了什么?
【问题讨论】:
-
是点击按钮时执行的清除功能吗?
-
"...但这并没有发生" 你有什么证据表明这没有按应有的方式工作?据我所知,您的
clear()函数看起来是正确的。另一方面,您的addItem()函数看起来很奇怪,尤其是因为您在调用setState()之后 向数组推送。我建议你为你的浏览器安装 React Developer Tools 插件。这将允许您直接检查组件的状态以查看它是否正常工作。这比console.log()更可靠。 -
@JosepVidal 是的,函数执行。
-
@Code-Apprentice 回调函数打印一个数组,其中包含元素。关于 addItem,我忘了包括我刚刚添加的一行。
标签: javascript reactjs state jsx