子组件:
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>
);}}
父组件:
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>
);
}
按钮组件,拥有它自己的默认属性,如上所述: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>
);
我不知道如何将Button组件中的dynamicAttributes作为html attrib
调用期待一个好的解决方案。提前谢谢。
使用了Destructing和Babel显示错误(意外令牌),如下图所示。
注意:已经安装了preset-env和preset-react。
答案 0 :(得分:3)
您可以在子组件中使用rest destructuring
模式。根据{{3}}
Rest
属性收集剩余的自己的可枚举属性键 尚未被destructuring
模式挑选出来。
当你直接将道具分配给DOM元素时,你应该小心地使用rest destruct,因为从v16 onwards
没有对属性进行检查,所有属性都允许在DOM元素上传递,所以甚至如果它不相关,则属性将被传递给您可能不想要的DOM元素
P.S。确保您不想传递给所有属性 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>
);
}
}
答案 1 :(得分:2)
如果你想传递选择性道具,你可以这样做:
<button
dataSrc={ btnSrc }
data-id={this.props.data-id}
data-attr={this.props.data-attr}
data-url={this.props.data-url}
key={index}
id={id}
className={`btn btn-default ${componentClass ? componentClass : null }`}
type="button"
onClick={this.props.onClick}
>
{text}
</button>
如果你想传递所有的动态属性,你应该相应地去构造道具。这样的事情:{onClick, dataSrc, ...dynamicAttrs} = this.props;
然后像这样传递它们:
<button
{...dynamicAttrs}
dataSrc={ btnSrc }
key={index}
id={id}
className={`btn btn-default ${componentClass ? componentClass : null }`}
type="button"
onClick={this.props.onClick}
>
{text}
</button>
另外,请访问此参考:Transferring props