子组件:
export default class Button extends React.Component {
constructor(props) {
super(props);
}
render() {
return(
<div className="form-group">
<button
// Need to add dynamic html attr here e.x: data-id
key={index}
id={id}
className={`btn btn-default ${componentClass ? componentClass : null }`}
type="button"
onClick={this.props.onClick}>
{text}
</button>
</div>
);}}
Run Code Online (Sandbox Code Playgroud)
父组件:
import Button from './Button';
Class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div className="s">
<Button data-id="exampleData" /> // Need to add data-id attr to child button
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
按钮组件,有它自己的默认属性,如上所述:id,className,type,onClick
父组件,将调用 Button 组件并添加一些额外的属性,如 data-id、onChange。
注意:在搜索了一些想法后,我知道我可以使用像下面这样的传播运算符:
父组件:
let dynamicAttributes = {"data-id":"someString", "data-attr":"someString", "data-url":"someString"};
return (
<div className="s">
<Button dataSrc={ btnSrc } {...dynamicAttributes} />
</div>
);
Run Code Online (Sandbox Code Playgroud)
我不知道如何将 Button 组件中的 dynamicAttributes 称为 html attrib
期待一个好的解决方案。提前致谢。
使用 Destructing 和 Babel 显示错误(意外标记),如下图所示。
注意:已经安装了 preset-env 和 preset-react。
rest destructuring您可以在子组件中使用模式。根据documentation
Rest属性收集模式尚未拾取的剩余的自己的可枚举属性键destructuring。
当你直接将 props 分配给 DOM 元素时,你应该小心地使用剩余解构,因为不会v16 onwards对属性进行任何检查,并且所有属性都允许在 DOM 元素上传递,所以即使它不相关,属性也会将被传递到您可能不希望的 DOM 元素
PS 确保所有不想传递给 DOM 的属性都被单独解构。
示例片段
export default class Button extends React.Component {
constructor(props) {
super(props);
}
render() {
const { onClick, dataSrc, ...rest } = this.props;
return(
<div className="form-group">
<button
{...rest}
key={index}
id={id}
className={`btn btn-default ${componentClass ? componentClass : null }`}
type="button"
onClick={onClick}>
{text}
</button>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4817 次 |
| 最近记录: |