【ReactJs学习笔记】【子组件将数据传给父组件 && 模拟发送更新给服务端】

【Javascript学习笔记】

目录


CommentForm新添加的内容传给爸爸CommentBox

理解

父组件通过一个函数,将之交给子组件提交的函数。让子组件告诉他有人添加了信息,并将对应信息放进该父函数传递给父组件。

代码

Box

...

    handleCommentSubmit(comment){
        console.log(comment);
    }

    render(){

...

                <CommentForm onCommentSubmit={this.handleCommentSubmit} />

...

Form

...

class CommentForm extends Component {
    handleSubmit(event){

...

+ this.props.onCommentSubmit({author,text});//获得从父组件传来的方法并通过对象将值传回给父组件
    }

...

效果

这里写图片描述


更新评论状态

代码

handleCommentSubmit(comment){
        let comments = this.state.data,//copy旧数据
            newComments = comments.concat(comment);//旧数据加一条新数据

        this.setState({data:newComments});
    }

效果

这里写图片描述


优化结构

取消App组件,将…Box直接渲染在root上

代码

root

//引入Component, Fragment,可将下面的简写,无需显示为React.xxx;
// 使用Fragment可避免渲染多了一个多余无用的div;切注意,最大容器有且只有一个
import React, { Component, Fragment} from 'react';
import CommentList from "./CommentList";
import CommentForm from "./CommentForm";
import $ from 'jquery';


class CommentBox extends Component{
    constructor(props){
        super(props);
        this.state = {
          data:[],
        };

        this.getComments();
        setInterval(() => this.getComments(),5000);//每五秒更新请求
      }

    getComments(){
        $.ajax({
          url:this.props.url,
          dataType:'json',
          cache:false,
          success:comments => {
            this.setState({
              data:comments
            });
          },
          error:(xhr,status,error) => {
            console.log(error);
          }
        });
      }

    handleCommentSubmit(comment){
        let comments = this.state.data,//copy旧数据
            newComments = comments.concat(comment);//旧数据加一条新数据

        this.setState({data:newComments});
    }

    render(){
        //多行渲染
        return(
            <Fragment>
                <div className="comments">
                    <h1>评论</h1>
                    <hr />
                </div>
                <CommentList data={this.state.data} />
                <CommentForm onCommentSubmit={this.handleCommentSubmit.bind(this)} />
            </Fragment>
        );
    }
}

//理解导出CommentBox作为默认的东西
// export { CommentBox as default };
// 可简写成
export default CommentBox;

效果

这里写图片描述


优化样式——使用AntDesign


快捷链接

全部React学习笔记的目录 Click Here>>
全部Javascript学习笔记的目录 Click Here>>
Less学习笔记 Click Here>>
安利一波前端开发推荐使用的工具 Click Here>>
github各类实战练习源码下载 Click Here>>
如果你觉得我的东西能帮到你,无限欢迎给我的github库点个收藏Star~0v 0~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值