我想要一个可重用的文本组件。我的todo应用程序应该在创建新项目后清除文本框。所以我setState更新列表和一个空白文本框。但是文本框没有被清除。反应 - 为什么文本框在渲染时不能清除?
console.log行使文本框呈现一个空白字符串。但是旧的字符串仍然存在。
出了什么问题?
var Textbox = React.createClass({
getDefaultProps: function() {
return {
text: ""
};
},
handleChange: function(event) {
this.props.callback(event.target.value);
},
render: function() {
console.log("textbox render", this.props.text)
return <div>
<label>{this.props.label}</label>
<input
type="text"
defaultValue={this.props.text}
onChange={this.handleChange} />
</div>
}
});
这里是增加了一个项目的方法的摘录,this.state.newItem
是包含文本状态的项目。
addNewItem: function() {
console.log("add new");
this.state.items.push({
display: this.state.newItem,
id: uuid()
});
this.setState({
newItem: "",
items: this.state.items
});
},
当然,文本框呈现与newItem
: 回报 添加新
你可以创建一个小提琴! – Vishnu
你不应该直接改变状态,而是创建对象'var newItems = this.state.items;'然后'newItems.push({something})'和'this.setState({newItem:“”,items: newItems}' – knowbody