当前位置:  开发笔记 > 编程语言 > 正文

在React中动态更改组件的子项

如何解决《在React中动态更改组件的子项》经验,为你挑选了1个好方法。

它是一种动态更改组件子项的方法吗?我有一个包装其他组件的组件,递归地走过孩子们,我想要的是改变子串的文本.例如

render() {
   const func = (node) => {
    React.Children.forEach(node.children, (childNode) => {
      if (childNode && childNode.props && typeof childNode.props.children === "object") {
        func(childNode.props);
      }
      else if (typeof childNode.props.children === "string"){
        console.log(childNode.props);
      }
    })
  }

  func(this.props);

  return { this.props.children };
}

在else中设置childNode.props.children ==="something"失败,children是只读的.知道如何实现我的目标吗?



1> Max Vorobjev..:

React道具的读取确实如React docs中所述.您可以遵循JSX方法,它始终创建新元素,而不是更改现有元素道具.在稍后阶段,元素与Virtual DOM中的现有React组件协调.

要通过JavaScript更改元素的道具,可以使用React.cloneElement方法克隆元素.请注意,在这种情况下,您不应渲染this.props.children,而是渲染新的结果元素树:

render() {
   const func = (children) => {
    return React.Children.map(children, (childNode) => {
      if (typeof childNode === "string")
        return "something"; // cover case: 
text
if (typeof childNode.props.children === "string") return React.cloneElement(childNode, [], "something"); return React.cloneElement(childNode, [], func(childNode.props.children)); }) } return { func(this.props.children) }; }

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有