美文网首页
react-16-兄弟组件传值-todoList

react-16-兄弟组件传值-todoList

作者: 云高风轻 | 来源:发表于2021-07-25 22:53 被阅读0次

1.前言

  1. 父子组件传值我们梳理过了
  2. 兄弟组件也该梳理了
  3. 这种todoList是常见的练习方式
  4. 今天就用 react实现一下

2.效果预览

2.gif

3. 组件分析

3个组件分析
  1. 上边的输入框和添加属于 TodoComponent组件
  2. 下边的列表 属于ListComponent组件
  3. 一个完整的TodolistComponent组件 把上面2个组件整合到一起

4. 传值分析

4.1 父子组件传值

1 父组件 → 子组件 ; 通过属性传值props
2 子组件 → 父组件 ; ----回调的方式 ;vue:$on和$emit,


4.2 兄弟组件传值

  1. 借助父组件 类似 Vue.prototype.$bus = new Vue() 原理
  2. 第三方状态管理库例如: vuex, redux, react-redux ,mobx
  3. 这里采用 借助父组件的形式, 这三种 redux, react-redux ,mobx都有系列文章讲解,文末有链接,欢迎查看

5. TodoComponent 组件

5.1 简单分析

  1. 输入框的 ref属性

2.单标签的 结束 标记 / 必须得写

  1. 点击事件的 this
  2. 把输入框的值 通过回调函数的形式传值给父组件

5.2 具体代码

  class TodoComponent extends React.Component {
            submit() {
                var title = this.refs.title.value
                var des = this.refs.des.value
                console.log(title, des);
                // 传递给父组件 回调
                this.props.submit({ title, des });
            }
            render() {
                return (
                    <div>
                        {/*  斜杠 闭合*/}
                        <input type="text" ref="title" defaultValue="白居易" />
                        <br />
                        <textarea name="" ref="des" defaultValue="诗魔" cols="30" rows="10"></textarea>
                        <br />
                        <button onClick={this.submit.bind(this)}> 添加</button>
                    </div>
                );
            }
        }

  1. defaultValue默认值
  2. submit 父组件的回调函数

6.ListComponent

6.1 简单分析

  1. 常规的 循环结构
  2. 接收 传过来的 列表数据
  3. 子元素调用父组件的删除 函数进行删除

6.2 具体代码

   class ListComponent extends React.Component {
            // ----自定义函数
            deleteItem(index) {
                //  删除操作
                // props只能用,不能改
                console.log("子删除", this.props);
                //  但是状态在父元素存着 修改父元素状态
                //  父元素通过属性传值的方式把函数地址给子元素
                // 子组件就可以回调父组件
                this.props.delete(index);
            }
            render() {
                //  属性传值
                let { todoData } = this.props;
                return (
                    <div>
                        <ul>
                            {todoData.map((todoObj, index) => {
                                return (
                                    <li key={index}>
                                        <h2>{todoObj.title}</h2>
                                        <p>{todoObj.des}</p>
                                        <button onClick={this.deleteItem.bind(this, index)}> 删除</button>
                                    </li>
                                )
                            })}
                        </ul>
                    </div>
                );
            }
        }
      

  1. todoData 父组件传过来的 列表数据
  2. deleteItem 父组件传过来的删除 函数
  3. 修改this指向

7. TodolistComponent

7.1 简单分析

  1. 子组件的列表数据在这个父组件存着
  2. 删除函数 t
  3. this

7.2 具体代码

 class TodolistComponent extends React.Component {
            constructor() {
                super();
                this.state = {
                    todoData: [
                        { title: "张三", des: "举例第一常用" },
                        { title: "李四", des: "举例第二常用" }
                    ]
                }
                // 修改this
                this.deleteItemHandle = this.deleteItemHandle.bind(this)
            }
            deleteItemHandle(index) {
                console.log("父组件删除", index, this);
                //1 新值不依赖旧的值
                // this.setState({todoData:[]})

                // 根据下标删除 splice  有返回值没 看下文档
                // 1.修改原数组  返回删除的内容
                // 2. 新的值要依赖旧的值 
                this.setState((oldState) => {
                    oldState.todoData.splice(index, 1)
                    return {
                        todoData: oldState.todoData
                    }
                })
            }
            render() {
                let { todoData } = this.state;
                return (
                    <div>
                        <TodoComponent submit={(itemObj) => {
                            console.log("submit -父组件", itemObj);
                            this.setState((oldState) => {
                                oldState.todoData.push(itemObj)
                                return {
                                    todoData: oldState.todoData
                                }
                            })
                        }} />
                        <hr />
                        <ListComponent delete={this.deleteItemHandle} todoData={todoData} />
                    </div>
                );
            }
        }


  1. state存着todoData 表示列表数据
  2. 2种常用修改this指向的方式复习 箭头函数 ,构造函数绑定
  3. 删除todoData.splice(index, 1)
    4.setState回调修改

参考资料

vuex系列-1
react系列-redux原理
react系列-react-redux


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉

相关文章

  • react-16-兄弟组件传值-todoList

    1.前言 父子组件传值我们梳理过了兄弟组件也该梳理了这种todoList是常见的练习方式今天就用 react实现一...

  • vue 组件之间传值 父传子 子传父 todolist

    vue 组件之间传值 父传子 子传父 todolist

  • angular组件之间的传值

    父子组件传值 父组件给子组件传值通过属性绑定的方式 子组件通过发送是事件给父组件传值 兄弟组件相互传值 兄弟组件通...

  • react 组件传值

    一、父子传值 1.父组件 TodoList.js 2.子组件 TodoItem.js

  • 组件之间的传值

    组件之间的传值,包括父子组件传值,兄弟组件之间的传值,其中父子组件包括父组件向子组件传值和子组件向父组件传值,现在...

  • Vue.js 父子组件传值 . 兄弟组件传值

    概述 vue中组件之间的传值传值情况主要有以下三种 父组件向子组件传值子组件向父组件传值兄弟组件之间相互传值或者是...

  • uni-app通信方式

    一,组件间传值包括下面三种情况: 1,父组件给子组件传值 2,子组件给父组件传值 3,兄弟组件通讯 二 代码1 父...

  • 组件通信

    vue传值可分为父子之间传值、兄弟组件之间传值、跨代组件之间传值 1.父子之间传值:可以使用$emit/props...

  • vuex最详细完整的使用用法

    为什么使用vuex? vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值(兄弟组件下又有父...

  • Vue组件之间的传值

    Vue父子组件之间的传值(props)兄弟组件 VUEX

网友评论

      本文标题:react-16-兄弟组件传值-todoList

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