javascript - 扩展父级中的子属性会引发只读异常

标签 javascript reactjs ecmascript-6

我正在制作一个 npm 包来验证元素,我需要实现以下语法才能真正有用且简单:

<validationLibrary type="numeric">
  <input type="text" placeholder"Sample 123">
</validationLibrary>

但我的问题是 child ,以下抛出异常:

React.Children.map(this.props.children,function(child,i){
       child.props.onChange = function (event) {
         isNumeric(event.target.value);
       }
     })

我的目标是让库强制子级执行我的库的方法,这样用户就不必执行一百万个配置步骤来使其工作。

有什么帮助吗?

编辑: 解决方案:

   let copies = React.Children.map(this.props.children,(child,i) =>{
       let copy = React.cloneElement(child,{onChange:function () {
         console.log("i overrode the default behaviour");
       }});
       return copy;
     })

    return <div>{copies}</div>;

最佳答案

自 React v0.14 起,props 被卡住,这意味着您无法更改它们。

FMI:https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#breaking-changes

因此,您可以做的是,为每个子元素返回一个元素。在您的情况下,您将克隆该元素并添加一个新的 Prop 来处理onChange。您可以使用 React.cloneElement 来实现这一点:

https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement

关于javascript - 扩展父级中的子属性会引发只读异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215225/

相关文章:

javascript - Vue 3 : Unable to update parent data from child component checkbox

javascript - Webpack HMR 与 emacs 中的 Skewer 模式

javascript - React 中太多的重新渲染

javascript - 在 ES6 中将纯类注入(inject) angular 1.x 应用程序的正确方法

javascript - Typescript 在语法方面与 es6/es7 有多少不同

javascript - 如何在没有链接组件的情况下更改 gatsby 中的路线?

javascript - 使用jquery无法读取Json数据

javascript - OwlCarousel2 动画点 onChange

javascript - React Textarea 状态无法更新

javascript - 防止组件卸载 - 在打开其他组件之前向用户显示通知