当前位置: 首页 > 知识库问答 >
问题:

是否可以将变量(道具/状态)传递给已创建的React实例[重复]

卫嘉佑
2023-03-14

我试图创建一个React类,其实例的状态更改会影响其子组件的道具。如果在父实例的render()方法中实例化子组件,则很容易实现它。但是,是否有一种方法可以将父实例的状态值传递给this.props.children作为已实例化的React组件传递给render()方法(请参见下面的代码)?

const Child = class extends React.Component{
  render(){
    return (
      <div>
        {this.props.val}
      </div>
    )
  }
}

const Parent = class extends React.Component{
  constructor(){
    this.state = {val: undefined};
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick(e){
    this.setState({val: e.nativeEvent.offsetY});
  }
  render(){
    const children = this.props.children.map( child => (
      child instanceof Object 
      ? child // how to pass this.state.val to this instance?
      : <Child val={this.state.val}></Child> // passing this.state.val is easy
    ) );

    return (
      <div>
        {children}
      </div>
    );
  }
}

const enhancedParent = class extends React.Component{
  render(){
    return (
      <div>
        {this.props.val} // or this.state.val, or anything else that receives this.state.val from its parent
      </div>
    );
  }
}

共有1个答案

须鸿祯
2023-03-14

如果我理解正确,您正在尝试向孩子添加额外属性,如下所示:

<Parent>
   <Child/>
</Parent>

但父对象希望将其子对象呈现为以下形式:

<Child val={1}/>

解决方案是React.cloneElement。

render(){
    return (
        <div>
            {{React.cloneElement(this.props.children, {
                val: this.state.val
            })}}
        </div>
    );
}
 类似资料:
  • 我试图使用{children}将道具传递给子组件。 父亲组件: 子组件: 像这样使用它们: 我想把来自FatherComp的道具直接传递给ChildComp: 是否有可能实现我试图直接使用react功能组件而无需状态管理的目标? 谢谢

  • 问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案:

  • 问题内容: 与在或中使用的方式类似: 问题答案: 是。 如果你不理会关键字参数,这很简单并且可以工作: 如你所见,Python将为你提供一个包含所有参数的元组。 对于关键字参数,你需要将其作为单独的实际参数接受,如的所示。

  • 问题内容: 我有一个带有一些componentDidMount逻辑的React组件: 是否可以通过props传递此组件,以便componentDidMount()中的所有内容都被执行,以某种方式伪造以便截取屏幕截图?遵循以下原则: 我知道我可以使用,但是我有一些复杂的登录逻辑,我想使用这样的快捷方式来避免,而是将所有需要的道具直接传递给组件? 问题答案: 在这里回答了这个问题。让我们在这里尝试相同

  • 我试图使用在child中的函数中生成的值。js并将其传递给父级。所以我可以使用这个值来过滤子数组。 小孩js 是生成的值,我需要在父级中访问该值。js Parent.js 我是不是错过了一些显而易见的东西?控制台。日志for返回子项的所有值。js节点,但当用作道具时返回未定义。 如何让函数运行,这样我就可以用返回的值过滤结果? 谢谢

  • 问题内容: 我需要使用路由器将道具传递到组件。这是我的代码: 如您所见,isAuthenticated我想传递给Login组件的道具。 当我登录道具时, isAuthenticated 道具不存在。我做错了什么?如何正确通过道具?我关注了文档以及其他讨论。据我了解,它应该可以工作。的版本 做出反应路由器 和 反应路由器- DOM 是 4.0.0 问题答案: 像这样传递它: 它应该在“登录组件”中可