Reactjs 给孩子们传递道具

Reactjs 给孩子们传递道具,reactjs,Reactjs,我正试着给这个传递额外的道具。道具。孩子们,我看到了这个答案 出于某种原因,虽然我没有收到任何错误,但我看不到道具 所以我有这个状态 this.state = { open: true } 我想把它传给这个.props.children,这就是我到目前为止所做的: { React.Children.map(this.props.children, child => React.cloneElement(child, {sidebarState: this.

我正试着给这个传递额外的道具。道具。孩子们,我看到了这个答案

出于某种原因,虽然我没有收到任何错误,但我看不到道具

所以我有这个状态

this.state = {
    open: true
}
我想把它传给这个.props.children,这就是我到目前为止所做的:

{
    React.Children.map(this.props.children, child =>
        React.cloneElement(child, {sidebarState: this.state.open}))
}
当我在console.logging this.props上记录孩子们时,我看不到我的新道具

--编辑-- 在孩子们身上看起来是这样的:

render() {
    console.log(this.props)
    // other code
}

顺便说一句,我正在使用react 16.0,有两种方法可以向孩子们传递道具:

儿童作为功能

子元素可以是函数,而不是React元素

调用children函数:

const List = ({ children, sidebarState }) => (
  <ul>
  {
    children(sidebarState)
  }
  </ul>
);
<List sidebarState={sidebarState}>
  {
    (sidebarState) => (
      <Item sidebarState={sidebarState} />
    )
  }
</List>
向子对象传递函数:

const List = ({ children, sidebarState }) => (
  <ul>
  {
    children(sidebarState)
  }
  </ul>
);
<List sidebarState={sidebarState}>
  {
    (sidebarState) => (
      <Item sidebarState={sidebarState} />
    )
  }
</List>
工作示例:

常数{Component}=React; const Item={sidebarState}=> {sidebarState?'open':'close'} ; const List={children,sidebarState}=> { 儿童糖化血红蛋白 } ; 类应用程序扩展组件{ 构造器{ 超级作物; 此.state={ 侧边栏状态:正确 } } toggleOpen=>this.setStateprevState=>{ sidebarState:!prevState.sidebarState }; 渲染{ const{sidebarState}=this.state; 回来 切换 { sidebarState=> } ; } } ReactDOM.render , 演示 ;
向儿童传递道具有两种方式:

儿童作为功能

子元素可以是函数,而不是React元素

调用children函数:

const List = ({ children, sidebarState }) => (
  <ul>
  {
    children(sidebarState)
  }
  </ul>
);
<List sidebarState={sidebarState}>
  {
    (sidebarState) => (
      <Item sidebarState={sidebarState} />
    )
  }
</List>
向子对象传递函数:

const List = ({ children, sidebarState }) => (
  <ul>
  {
    children(sidebarState)
  }
  </ul>
);
<List sidebarState={sidebarState}>
  {
    (sidebarState) => (
      <Item sidebarState={sidebarState} />
    )
  }
</List>
工作示例:

常数{Component}=React; const Item={sidebarState}=> {sidebarState?'open':'close'} ; const List={children,sidebarState}=> { 儿童糖化血红蛋白 } ; 类应用程序扩展组件{ 构造器{ 超级作物; 此.state={ 侧边栏状态:正确 } } toggleOpen=>this.setStateprevState=>{ sidebarState:!prevState.sidebarState }; 渲染{ const{sidebarState}=this.state; 回来 切换 { sidebarState=> } ; } } ReactDOM.render , 演示 ; 这里有一个例子

在不向孩子们传递道具之前:

props1和props2与每个子级的现有props合并

关于类型脚本类型,您必须使用React.ReactElement而不是React.ReactNode,否则TS编译器将在React.Children.map或TS忽略它:

type Props = {
  children: React.ReactElement;
};
更多的解释请参见,这对我理解如何做有很大帮助!梅迪姆佩沃尔

这里有一个例子

在不向孩子们传递道具之前:

props1和props2与每个子级的现有props合并

关于类型脚本类型,您必须使用React.ReactElement而不是React.ReactNode,否则TS编译器将在React.Children.map或TS忽略它:

type Props = {
  children: React.ReactElement;
};
更多的解释请参见,这对我理解如何做有很大帮助!梅迪姆佩沃尔


你把控制台放在孩子们里面的地方,你能展示代码吗?我已经添加了它,但我不知道它是否会有很大帮助。你试过使用jsx吗?使用jsx很容易指定道具。我总是在那里得到一个不同的组件,所以我不确定jsx将如何完成这项工作。如果你把控制台放在孩子们里面,你能显示代码吗?我已经添加了它,但我不知道它是否会有很大帮助。你试过使用jsx吗?使用jsx指定道具比较容易,因为我总是在那里得到一个不同的组件,所以我不确定jsx将如何在这里完成这项工作