hil*_*arl 25 javascript reactjs
我正在尝试做教程:https://facebook.github.io/react/docs/tutorial.html
import React, { PropTypes } from 'react';
import classnames from 'classnames';
import styles from './CommentBox.css';
import withStyles from '../../decorators/withStyles';
import Link from '../../utils/Link';
import $ from 'jquery';
@withStyles(styles)
class CommentBox extends React.Component {
constructor() {
super();
this.state = {data: []};
}
loadCommentsFromServer() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
})
}
componentDidMount() {
this.loadCommentsFromServer();
setInterval(this.loadCommentsFromServer, this.props.pollInterval);
}
render() {
let url="/public/comments.json"
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList data={this.state.data} />
<CommentForm />
</div>
);
}
}
class CommentList extends React.Component {
render() {
let data = this.props.data
var commentNodes = data.map(function (comment) {
return (
<Comment author={comment.author}>
{comment.text}
</Comment>
);
});
return (
<div className="commentList">
{commentNodes}
</div>
);
}
};
class Comment extends React.Component {
render() {
return(
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
{this.props.children}
</div>
);
}
}
class CommentForm extends React.Component {
render() {
return (
<div className="commentForm">
Hello, world! I am a CommentForm.
</div>
);
}
};
export default CommentBox;
Run Code Online (Sandbox Code Playgroud)
但是,该教程有点过时,我使用React 0.14-rc1和ES6语法.我已尽力遵循教程并以0.14方式实现它.能够达到这一点,但现在得到错误:
TypeError: this.props is undefined
Run Code Online (Sandbox Code Playgroud)
无法弄清楚这个问题.知道为什么吗?谢谢
随着React从createClass的转移,ES6 classes我们需要自己处理this我们方法的正确值,如下所述:http://www.newmediacampaigns.com/blog/refactoring-react-components-to-es6-classes
更改您的代码,使方法有限,以便在consructor中更正此值:
export default class ComponentClass extends React.Component {
constructor(props) {
super(props);
this._myHandler = this._myHandler.bind(this);
}
_myHandler(props) {
console.log(props);
}
render() {
return (
<div className="col-xs-6 col-md-4">
<button type="button" className="btn btn-danger" onClick={this._myHandler}><i className="fa fa-trash"> Delete</i></button>
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
这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 ComponentClass extends React.Component {
_myHandler = (props) => {
console.log(props);
}
render() {
return (
<div className="col-xs-6 col-md-4">
<button type="button" className="btn btn-danger" onClick={this._myHandler}><i className="fa fa-trash"> Delete</i></button>
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
将传递props给构造函数将有所帮助:
constructor(props) {
super(props);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49811 次 |
| 最近记录: |