• 04 React快速入门(四)——组件拆分


    问题描述:

          在目前存在的实例中,代码结构如下图所示:

           在index.js中引入了TodoList.js中定义的组件来实现页面上的一个简单布局,一个输入框和一个按钮,通过点击按钮来依次将输入框中的内容显示在页面上,并且也实现了删除功能,点击某一列,此列将会被删除,如图:

          因为此时的页面是一整个的TodoList组件,所以我们想将它进行拆分,分解为更小的组件来实现。

    解决方法:

          为了实现组建拆分,我们在src目录下新建一个js文件,取名为TodoItem.js,然后在此文件里新建一个组件,此组件就是每次点击按钮时候的增加项,然后将它引入到TodoList文件中即可,如下图:

    a、新建文件:

    b、定义组件:

    c、引入定义的组件,实现组建拆分:

    d、效果:

    附:由上面的步骤,我们已经实现了组建的拆分,将原本一个大的TodoList组件下的增加列表项拆分了出来,但是,上述操作还存在三个问题:

          1、每次点击按钮都会增加相同的Item todolist项目,并没有增加输入框中的内容;

          2、控制台报key的错误;

          3、点击每列的时候删除功能失效。

    下面针对上述问题来逐一进行解决:

          一、

          首先是第一个问题,涉及到了主副组件的传值文题,主组件是TodoList,副组件是TodoItem,我们要将主组件中输入框的值传到副组件中的<div>标签中,作为其内容来显示,操作步骤如下:

          a、在主组件的<TodoItem>标签上添加一个content的属性,然后在副组件中通过props来获取值,如下:

          主组件中添加属性:

          副组件通过props取值:

          b、效果:

          二、

          针对控制台报错的信息处理起来的话更加简单,像第一篇博客处理方法一样,增加一个key属性即可,如图:

          效果如图:

          三、

          关于实现点击列表项进行删除的功能涉及到主副组件的通信问题:主组件如果要和副组件进行通信,可以通过定义属性来进行;副组件如果要和主组件通信,副组件要调用主组件传递过来的方法。搞清上面两句话后我们的删除功能不难实现,如下:

          a、在主组件定义index的属性,每次循环创建列表项的时候自带索引值,方便后续删除功能实现,在主组件定义delete方法,用于和副组件通信,如下:

          有人可能会问,key和index两个属性都用了循环产生的index值,我在副组件直接接受key属性传过来的值不就可以了吗,干嘛还要多定义一个相同值的属性呢?对于这个问题要搞清楚的一点是,这个key值仅仅是为了配合react语法中的diff算法而定义的一个属性,它不会参与到其他的任何操作中,换句话说,这个key属性是不会传到副组件中的。

          b、在副组件绑定列表项的点击事件,用来获取此时点击的列表的索引值,并将它通过调用主组件的方法传递到主组件中,如图:

    c、完善主组件中的delete方法的代码内容,实现删除功能,如图:

    至此,组件拆分已经全部完成,在这个过程中主要有两点需要掌握:

    1、JavaScript中this的指向问题;

    2、主副组件的通信问题。

    X北辰北的博客,想看更多内容,请移步我的个人博客:http://www.xbeichenbei.com/
  • 相关阅读:
    Javascript 函数表达式
    当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
    Angularjs 脏值检测
    Angularjs 双向绑定机制解析
    AngularJS 初用总结
    从jquery里的$.ajax()到angularjs的$http
    XSS攻击及防御
    很赞的源码平台
    GET和POST
    [转]xxx.hbm.xml模版
  • 原文地址:https://www.cnblogs.com/xuqw/p/11794661.html
Copyright © 2020-2023  润新知