尝试在组件之间传递数据时未定义
Getting undefined when trying to pass data between component
首先,我是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
。也许我错过了什么。
在您的示例中,props
是event
对象,其中没有tag
属性-这就是您获得undefined
的原因。,你需要为deleteTag
设置this
,然后你可以在deleteTag
方法中通过this.props
获得组件props
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>
)
}
}
随着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>
)
}
}
相关文章:
- 一台特定计算机的Ajax请求数据未定义/失败
- Chart.js2.X中的条形值-数据集元数据未定义
- Jquery从JSON获取数据(未定义)
- jsFunction'当事件启动器在表单内时,s数据未定义
- 在 Node.js 中生成一个子进程,数据未定义
- jQuery几乎赢得了我 - UI自动完成“数据未定义”
- 在脚本中从电子表格中获取数据:“未定义数据表”
- jQuery自动完成数据未定义错误
- mvc函数返回的AJAX调用数据未定义
- Angular UI路由器解析数据未定义
- Qtip数据未定义错误
- Ajax表单提交+引导验证程序正在工作.现在"数据未定义”;错误
- bodyParser(urlencodedParser)数据未定义
- ReceiveMessage事件显示数据未定义
- ie9上的Ajax调用(成功数据-未定义)
- 插入的数据未定义,然后在数据库中显示为一个数字
- Ajax post数据未定义
- 美元.getJSON数据未定义
- javascript数据未定义
- JS HighCharts.JS代码中出现Pie数据未定义错误