网站建设公司 岗位,做h5的软件有哪些,网站开发的功能需求文档模板,莱西市城乡建设局网站React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子#xff08;… React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子兄弟通信 3. render props3.1 组件标签上的标签体内容 传递3.2 render props 4. 附代码 1. 父传子——props
1.1 简单例子——props
给子组件标签添加属性属性名自定义保持语义化即可。简单例子的核心代码很简单就先截图吧代码一起附在最后了需要注意的是类式组件与函数式组件的不同如下
1.2 props 可以传递任何数据
1.2.1 传递数字、对象等
上面我们看到传递的是字符串下面简单看看传递对象如下
1.2.2 传递函数
这个详细看下面的 《2. 子传父 子传子》下面有详细的介绍。
1.2.3 传递模版jsx
如下
2. 子传父 子传子——props
2.1 父传子——传递函数
父传子函数的重要性主要是下面怎么通过它实现子传父简单看看父传子传函数如下 效果如下
2.2 子传父——通过父传子的函数实现
下面需求是在子组件里添加狗狗数据并把数据传递给父组件如下 看效果
2.3 优化 子传子兄弟通信
下面实现的需求是在上面子组件D中有一个按钮点击触发addDog(即添加新的dog并在另一个子组件E中有所体现。所以流程就是父把函数addDog 传递给子组件D子组件D中在调函数的时候把新增数据传给父父的addDog中实现更新state数据然后子组件E中实时展示最新的父中的传来的state数据具体实现如下 parent.jx如下 D组件如下 E组件中就简单了直接接受父传来的数据即可如下 效果如下
3. render props
3.1 组件标签上的标签体内容 传递
如果要传递组件标签上的标签体内容获取的时候需要注意此传递的内容放到了props的children属性上如下 如果上面的标签体内容放的不是love而是另外一个组件F和ChildE形成父子关系的F组件那依然是放在了props的children属性上如下
3.2 render props
上面3.1中通过把组件F放在ChildE的标签体内来形成父子关系可以用另外一种方式实现就是通过传递箭头函数的方式如下 div classNamechildEChildE dogList{this.state.dogList} testJsx{p测试一下传递jsx/p}render{()F/}//div{props.render()}传参数的情况这里的函数名习惯用render所以叫 render props 如下 div classNamechildEChildE dogList{this.state.dogList} testJsx{p测试一下传递jsx/p}// render{()F/}render{(kind)F petKind{kind}/}//div{props.render(狗狗)}接到E传来的宠物类型是{props.petKind}4. 附代码
parent.jsx:import React from react;
import ChildA from ./ChildA;
import ChildB from ./ChildB;
import ChildC from ./ChildC;
import ChildD from ./ChildD;
import ChildE from ./ChildE;
import F from ./F;
import ./index.cssclass Parent extends React.Component{state {notice:通知——今天有学生被开除了,expelledNum:1,student:{name:张三,age:21,reason:逃课次数过多},citys:[北京,上海,广州,深圳],dogList:[{dogName:麦兜,dogAge:3},{dogName:贝塔,dogAge:2},]}//给子组件传递的函数getCityStrs (){// console.log(this.state.citys);return this.state.citys;}//给子组件传递的带参数函数参数用来接受子组件在调用函数时给父组件传递的数据addDog (dog){console.log(收到子组件添加的新dog,dog);//更新 state中 dogList的数据这样子组件E中展示的数据就是最新的const dogList this.state.dogList; //获取旧数据const newDogList [...dogList,dog]; console.log(newDogList);this.setState({dogList:newDogList});// 更新state}render(){return(div classNameparent我是父组件!div classNamechildAChildA notice{通知——今天放假}//divdiv classNamechildBChildB notice{this.state.notice} expelledNum{this.state.expelledNum} student{this.state.student}//divdiv classNamechildCChildC getCityStrs{this.getCityStrs}//divdiv classNamechildDChildD addDog{this.addDog}//divdiv classNamechildEChildE dogList{this.state.dogList} testJsx{p测试一下传递jsx/p}// render{()F/}render{(kind)F petKind{kind}/}//div/div)}
}export default Parent;xxxA.jsximport React from react;class ChildA extends React.Component{render(){return(div我是子组件A——类式组件br /br /收到来自于父组件的数据{this.props.notice}/div)}
}export default ChildA;xxxB.jsxfunction ChildB(props){// console.log(props);const {name,age,reason} props.student;return(div我是子组件B——函数组件br /br /收到来自于父组件的数据{props.notice}br /被开除的人数是{props.expelledNum}br /被开除学生的信息{name}-{age}-{reason}/div)
}export default ChildB;xxxC.jsxfunction ChildC(props){// console.log(props);//调用父传过来的函数 获取citys数据const citys props.getCityStrs();// console.log(citys);return(div我是子组件C——函数组件br /br /收到父传子的函数并调用函数获取了数据{citys.map((city,index){return li key{index}{city}/li})}/div)
}export default ChildC;xxxD.jsxfunction ChildD(props){// console.log(props);const newDog {dogName:泡泡,dogAge:7};// 1. 准备要新增的dog数据const addDog props.addDog;//2. 获取父组件传递过来的函数 addDog// addDog(newDog); //3. 在子组件中 执行 addDog 函数并将新增dog传参过去给父组件return(div我是子组件D——函数组件br /{/* 1. 点击时再把newDog 传过去 2. 当然这里如果看着不舒服也可以把上面3步封装成一个函数点击时触发新封装的函数 */}button onClick{()addDog(newDog)}添加狗狗/button/div)
}export default ChildD;xxxE.jsxfunction ChildE(props){console.log(props);const dogList props.dogList;// console.log(dogList);return(div我是子组件E——函数组件br /{props.testJsx}br /展示狗狗信息ul{dogList.map((dog,index)li key{index}{dog.dogName}-{dog.dogAge}/li)}/ulhr /{/* {props.children} */}{/* {props.render()} */}{props.render(狗狗)}/div)
}export default ChildE;F.jsxfunction F(props){return(div我是E组件的子组件我是F——函数组件br /接到E传来的宠物类型是{props.petKind}/div)
}export default F;