ReactJS 从子组件修改父状态
ReactJS modify parent state from child component
我试图在单击时从我的状态数组中删除一个项目。目前我有一个 onclick 侦听器,它调用传递给道具的函数。但是我收到一条警告:bind(): React component methods may only be bind to the component instance。请参阅应用...,它不会删除该项目。
感谢您就此问题提供的任何帮助!它几乎让我的进步停滞不前。
(function (React) {
var data = [
'Go to work',
'Play Albion Online',
'Keep learning React'
]
var App = React.createClass({
getInitialState: function () {
return {data: []}
},
componentWillMount: function () {
this.state.data = data;
},
removeItem: function (i) {
console.log(i);
},
render: function () {
return (
<ToDoList onRemoveItem={this.removeItem} tasks={this.state.data} />
)
}
});
var ToDoList = React.createClass({
render: function () {
var scope = this;
var tasks = this.props.tasks.map(function (task, i) {
return <ToDo onClick={scope.props.onRemoveItem.bind(this, i)} key={task} task={task} />
});
return (
<ul>
{tasks}
</ul>
)
}
});
var ToDo = React.createClass({
render: function () {
return (
<li>{this.props.task}</li>
)
}
});
React.render(<App />, document.getElementById('example'));
})(React);
React 实际上会自动将方法绑定到当前组件:
http://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html
在 TodoList 组件中,而不是:
scope.props.onRemoveItem.bind(this, i)
尝试:
scope.props.onRemoveItem.bind(null, i)
通过提供 null
而不是 this
你将允许 React 做它自己的事情。您还需要实际使用 onClick 处理程序:
<li onClick={this.props.onClick}>{this.props.task}</li>
我试图在单击时从我的状态数组中删除一个项目。目前我有一个 onclick 侦听器,它调用传递给道具的函数。但是我收到一条警告:bind(): React component methods may only be bind to the component instance。请参阅应用...,它不会删除该项目。
感谢您就此问题提供的任何帮助!它几乎让我的进步停滞不前。
(function (React) {
var data = [
'Go to work',
'Play Albion Online',
'Keep learning React'
]
var App = React.createClass({
getInitialState: function () {
return {data: []}
},
componentWillMount: function () {
this.state.data = data;
},
removeItem: function (i) {
console.log(i);
},
render: function () {
return (
<ToDoList onRemoveItem={this.removeItem} tasks={this.state.data} />
)
}
});
var ToDoList = React.createClass({
render: function () {
var scope = this;
var tasks = this.props.tasks.map(function (task, i) {
return <ToDo onClick={scope.props.onRemoveItem.bind(this, i)} key={task} task={task} />
});
return (
<ul>
{tasks}
</ul>
)
}
});
var ToDo = React.createClass({
render: function () {
return (
<li>{this.props.task}</li>
)
}
});
React.render(<App />, document.getElementById('example'));
})(React);
React 实际上会自动将方法绑定到当前组件:
http://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html
在 TodoList 组件中,而不是:
scope.props.onRemoveItem.bind(this, i)
尝试:
scope.props.onRemoveItem.bind(null, i)
通过提供 null
而不是 this
你将允许 React 做它自己的事情。您还需要实际使用 onClick 处理程序:
<li onClick={this.props.onClick}>{this.props.task}</li>