从子组件传递数据给父组件
commentForm组件
'use strict' import React from 'react' class CommentForm extends React.Component{ handleSubmit(event) { //作用于表单 event.preventDefault(); console.log('提交表单'); let author = this.refs.author.value, //获取用户提交数据 text = this.refs.text.value; //获取用户提交数据 console.log(author, text); this.props.onCommentSubmit({author, text, date: '刚刚'}) } render() { return ( <form className="ui reply form" onSubmit={this.handleSubmit.bind(this)}> <div className="field"> <input type="text" placeholder="姓名" ref="author"/> </div> <div className="field"> <textarea placeholder="评论" ref="text"></textarea> </div> <button type="submit" className="ui blue button">添加评论</button> </form> ) } } export { CommentForm as default }; //输出CommentBox组件作为默认的东西
commentBox组件
'use strict' import React from 'react'; import CommentList from './CommentList'; import CommentForm from './CommentForm'; import $ from 'jquery' class CommentBox extends React.Component{ constructor(props) { super(props); //设置组件初始化状态 this.state = { data: [] }; this.getComments(); setInterval(() => this.getComments(), 5000); } //构造函数 handleCommentSubmit(comment) { console.log(comment); //用户提交的内容 let comments = this.state.data, //获取原来提交的内容 newComments = comments.concat(comment); //新的提交内容 this.setState({data: newComments}); } getComments() { $.ajax({ url: this.props.url, dataType: 'json', cache: false, success: comments => { this.setState({data: comments}) }, error: (xhr, status, error) => { console.log(error) } }) } render() { return( <div className = "ui comments"> <h1>评论</h1> <div className="ui divider"></div> <CommentList data = {this.state.data} /> <CommentForm onCommentSubmit={this.handleCommentSubmit.bind(this)}/> </div> ); } } export { CommentBox as default }; //输出CommentBox组件作为默认的东西
为什么在函数后面加.bind(this)?
handleCommentSubmit(comment) { console.log(comment); //用户提交的内容 let comments = this.state.data, //获取原来提交的内容 newComments = comments.concat(comment); //新的提交内容 this.setState({data: newComments}); }
函数中有使用到this