Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传球作为道具发挥作用,分两层_Javascript_Reactjs_Typescript - Fatal编程技术网

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}