2
我有一个TodoList组件,它是App组件的子组件。我希望更改App组件的待办事项列表的状态。我试图从TodoList组件传递toggleComplete功能到Todo组件,所以在onClick事件中,它会触发并工作到App组件,以便更新状态。反应:无法访问父组件的功能,它作为道具传递给子组件
我得到一个 “遗漏的类型错误:无法读取属性未定义 'toggleComplete'” 在TodoList.js
〜/ src目录/组件/ Todo.js
import React, {PropTypes} from 'react';
export default class Todo extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<li className={this.props.todo.done ? 'completed' : 'view'}>
<div className="view">
<input onClick={this.props.toggleComplete(this.props.id)} className="toggle" type="checkbox" checked={this.props.todo.done} />
<label>{this.props.id}: {this.props.todo.title}</label>
<button className="destroy"></button>
</div>
</li>
);
}
}
〜/ src目录/组件/TodoList.js
import React, {PropTypes} from 'react';
import Todo from './Todo'
export default class TodoList extends React.Component {
constructor(props) {
super(props);
}
toggleComplete(todoID){
console.log('hit toggleComplete TodoList');
}
render() {
return (
<section className="main">
<ul className="todo-list">
{this.props.todos.map(function(todo, index){
return <Todo todo={todo} toggleComplete={this.toggleComplete} id={index + 1} key={index+1}/>;
})}
</ul>
</section>
);
}
}
〜/ SRC/App.js
import React, { Component } from 'react';
import Header from './component/Header'
import TodoList from './component/TodoList'
import TodoFooter from './component/TodoFooter'
import Footer from './component/Footer'
export default class App extends Component {
constructor(){
super();
this.state = {
todos: [
{title: 'Taste JavaScript', done: true},
{title: 'Buy Unicorn', done: false},
{title: 'eat all day', done: false},
{title: 'sleep all night', done: true}
]
}
}
render() {
return (
<div>
<section className="todoapp">
<Header />
<TodoList todos={this.state.todos} />
<TodoFooter />
</section>
<Footer />
</div>
);
}
}
结合地图的'这个'参数与绑定到'这'的道具得到它的工作。谢谢 :) –