美文网首页
React技巧7(TodoList实现3组件之间传递数据之优化)

React技巧7(TodoList实现3组件之间传递数据之优化)

作者: 前端人人 | 来源:发表于2018-01-29 11:00 被阅读21次

    微信公众号首发

    本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章!

    1.React 技巧1(状态组件与无状态组件的使用) ----2018.01.04

    2.React 技巧2(避免无意义的父节点)----2018.01.05

    3.React 技巧3(如何优雅的渲染一个List)----2018.01.06

    4.React 技巧4(如何处理List里面的Item)----2018.01.07

    5.React 技巧5(TodoList实现)----2018.01.08

    6.React技巧6(TodoList实现2组件之间传递数据)---2018.01.09(新增)

    7.React技巧7(TodoList实现3组件之间传递数据之优化)---2018.01.10(新增)

    开发环境:Windows 8,node v8.9.1,npm 5.5.1,WebStorm 2017.2.2

    这节课,我们来优化一下上节课的代码!其中有几个地方,代码写的有点重复!

    handleItemDel(id) {

    let list =this.state.list;

       list.find(data => data.id === id).status =0;

       this.setState({list: list})

    }

    handleItemRecovery(id) {

    let list =this.state.list;

       list.find(data => data.id === id).status =1;

       this.setState({list: list})

    }

    其中这两段代码就是很重复,我们重构下:

    handleItemEdit(id, type) {

    let list =this.state.list;

       list.find(data => data.id === id).status = type;

       this.setState({list: list})

    }

    我们看下这个List.jsx组件,是不是感觉页有很多重复代码?

    我们把List.jsx组件也重构下!

    import Reactfrom 'react';

    const LiCont = ({data, list, handleItemEdit, type}) =>

           {data.title}

    handleItemEdit(data.id, data.status ===1 ?0 :1)}

    className={data.status ===1 ?"del" :"recovery"}>

               {data.status ===1 ?"删除" :"恢复"}

    ;

    const List = props =>

           {

    props.list.map(data => [

    props.type ===0 ?

                           :

    props.type ===1 && data.status ===1 ?

                               :

    props.type ===2 && data.status ===0 ?

                                   :

    null

                   ]

    )

    }

    ;

    export default List;

    TodoList.jsx 完整代码

    import Reactfrom 'react';

    import List from './List';

    import '../../../public/css/todoList.pcss';

    class TodoListextends React.Component {

    constructor(props) {

    super(props);

           this.state = {

    list: []

    };

           this.handleAdd =this.handleAdd.bind(this);

           this.handleItemEdit =this.handleItemEdit.bind(this);

       }

    handleAdd() {

    let item =this.refs['todoInput'].value;

           if (item) {

    let list =this.state.list;

               list.push({id: list.length +1, title: item, status:1});

               this.setState({list: list}, () =>console.log(this.state.list))

    }else {

    alert('不能为空')

    }

    }

    handleItemEdit(id, status) {

    let list =this.state.list;

           list.find(data => data.id === id).status = status;

           this.setState({list: list})

    }

    componentDidMount() {

    }

    render() {

    let {list} =this.state;

           return (

                   添加

                           全部

                           未删除

                           已删除

           );

       }

    }

    export default TodoList;

    这种写法,虽然省略了一些代码,但是可读性可能会差点,理解起来,新手可能有点困难!又多了一个子组件,大家发现没有祖孙组件,甚至更多层级的组件,我们都要把状态,方法层层传递,讲这节课是为了之后的状态管理器做铺垫!

    我们看下浏览器效果!

    一切正常!

    本文完

    禁止擅自转载,如需转载请在公众号中留言联系我们!

    感谢童鞋们支持!

    如果你有什么问题,可以在下方留言给我们!

    相关文章

      网友评论

          本文标题:React技巧7(TodoList实现3组件之间传递数据之优化)

          本文链接:https://www.haomeiwen.com/subject/jlcxzxtx.html