首先,我是React的新手。我有两个组件TagUtils
和Urls
。我正在尝试将路由器参数从Urls
传递到TagUtils
。这是我的代码:
Urls.jsx
// some codes....
export default class Urls extends React.Component {
render() {
return (
<div>
<TagUtils tag={this.props.params.tag_id}/>
</div>
)
}
}
TagUtils.jsx
export default class TagUtils extends React.Component {
deleteTag(props) {
console.log(props.tag);
}
render() {
return (
<div className="col-xs-6 col-md-4">
<button type="button" className="btn btn-danger" onClick={this.deleteTag}><i className="fa fa-trash"> Delete</i></button>
</div>
)
}
}
当我点击“删除”按钮时,它只显示undefined
。也许我错过了一些内容。
答案 0 :(得分:3)
在您的示例中,props
是event
对象,其中没有tag
属性 - 这就是您获得undefined
的原因。您需要设置this
1}} deleteTag
,然后您可以通过props
方法中的this.props
获取组件deleteTag
export default class TagUtils extends React.Component {
constructor() {
this.deleteTag = this.deleteTag.bind(this);
}
deleteTag() {
console.log(this.props.tag);
}
render() {
return (
<div className="col-xs-6 col-md-4">
<button type="button" className="btn btn-danger" onClick={this.deleteTag}>
<i className="fa fa-trash"> Delete</i>
</button>
</div>
)
}
}
答案 1 :(得分:1)
随着React从createClass转移到ES6 classes
,我们需要自己处理this
到我们方法的正确值,如下所述:http://www.newmediacampaigns.com/blog/refactoring-react-components-to-es6-classes
更改代码,使方法在构造函数中绑定到正确的值:
export default class TagUtils extends React.Component {
constructor(props) {
super(props);
this.deleteTag = this.deleteTag.bind(this);
}
deleteTag(props) {
console.log(props.tag);
}
render() {
return (
<div className="col-xs-6 col-md-4">
<button type="button" className="btn btn-danger" onClick={this.deleteTag}><i className="fa fa-trash"> Delete</i></button>
</div>
)
}
}
no autobinding
是React家伙为ES6课程刻意迈出的一步。 React.createClass
提供了自动绑定到正确的上下文。有关详细信息,请访问:https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding
因此,基于此,您还可以将代码更改为:
export default class TagUtils extends React.Component {
deleteTag = (props) => {
console.log(props.tag);
}
render() {
return (
<div className="col-xs-6 col-md-4">
<button type="button" className="btn btn-danger" onClick={this.deleteTag}><i className="fa fa-trash"> Delete</i></button>
</div>
)
}
}