Javascript 传球作为道具发挥作用,分两层
考虑下面的代码Javascript 传球作为道具发挥作用,分两层,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,考虑下面的代码 class App extends React.Component<{}, IState> { public state: IState = { todos: TODOS } private onItemRemove = (item: any) { ///// } render() { return ( <div> <ToDoList todos={this.state
class App extends React.Component<{}, IState> {
public state: IState = {
todos: TODOS
}
private onItemRemove = (item: any) {
/////
}
render() {
return (
<div>
<ToDoList
todos={this.state.todos}
onItemRemove={() => this.onItemRemove}
/>
</div>
);
}
}
const ToDoList: React.SFC<IProps> = props => {
return (
<ul>
{props.todos.map((todo: any) => {
return (
<ToDoItem
name={todo.name}
key={todo.id}
id={todo.id.toString()}
onItemRemove={props.onItemRemove}
/>
);
})}
</ul>
);
}
const ToDoItem: React.SFC<IProps> = props => {
return (
<li>
{props.name}
<button onClick={() => props.onItemRemove(props.id)}>
Remove
</button>
</li>
);
};
类应用程序扩展了React.Component{
公共状态:IState={
待办事项:待办事项
}
private onItemRemove=(项目:任何){
/////
}
render(){
返回(
这个.emremove}
/>
);
}
}
const ToDoList:React.SFC=props=>{
返回(
{props.todos.map((todo:any)=>{
返回(
);
})}
);
}
const ToDoItem:React.SFC=props=>{
返回(
{props.name}
props.onItemRemove(props.id)}>
去除
);
};
我听说这可以通过redux或context来实现,但是否可以在不使用redux或context的情况下将App
传递到ToDoItem
方法
或者,也许有一种更为理想的方法可以实现这一点,但我可能会错过这一点?来自官方文档:不要仅仅为了避免将道具向下传递几层而使用上下文。坚持使用需要在多个级别的多个组件中访问相同数据的情况。
因此,您的代码看起来非常优化。组件将呈现道具并将道具传递给
ToDoItem
正确地说,只有函数不会触发。在您的应用程序组件中,将onItemRemove={()=>this.onItemRemove}
替换为onItemRemove={this.onItemRemove}