react的props属性怎样理解?用法是什么?
Admin 2021-08-30 群英技术资讯 627 次浏览
//父组件传值 class Father extends React.PureComponent{ render(){ return ( <Son value={"son"} /> ) } } class Son extends React.PureComponent{ render(){ return ( <div>this data is {this.props.value}</div> ) } }
function Fa(){ return ( <Son value={"son"} /> ) } function Son(props){ return ( <div>this data is {props.value}</div> ) }
在函数组件中,props只需要传一个值就好了,非常方便 在React文档中,对props的解释是
当 React 元素为用户自定义组件时,它会将 JSX 所接收的属性(attributes)以及子组件(children)转换为单个对象传递给组件,这个对象被称之为 “props”
所以,我们通过props能得到父类组件上传的值,也能通过props.children
直接得到jsx写成的子组件
React在文档中强调
所有 React 组件都必须像纯函数一样保护它们的 props 不被更改。
纯函数的概念我们已经在redux中解释过了,总而言之,我们不能改变props的值。
现在来总结一下组件间通信:
//父组件给子组件传值以及说过了,现在总结子组件给父组件传值,此时往往需要父组件给子组件先传一个props函数,
//子组件通过调用传入的函数传值改变父组件的值 export default class Fa extends Component { state = {faValue:'Fa1'} changeFa = (value)=>{ this.setState(()=>{ return {faValue:value} }) } render() { return ( <> <h1>Fa's value is {this.state.faValue}</h1> <Son changeFa={this.changeFa}/> </> ) } } export default class Son extends React.PureComponent{ changeValue = ()=>{ this.props.changeFa(this.inputRef.value) } render() { return ( <> <input type="text" placeholder={"请输入您的值"} ref={(el)=>{this.inputRef = el}}/> <button onClick={this.changeValue}>change</button> </> ) } }
然后写一个函数组件的写法:
function Fa(){ const [faValue,setFaValue] = useState("Fa1") const changeFa = (value)=>{ setFaValue(value) } return ( <div> <h1>Fa's value is {faValue}</h1> <Son changeFa={changeFa} /> </div> ) } function Son(props){ const inputValue = useRef("") //定义改变fa组件的值的函数 const changeFaValue = ()=>{ props.changeFa(inputValue.current.value) } return ( <> <input type="text" placeholder={"请输入您要改变的值"} ref={inputValue}/> <button onClick={changeFaValue}>change value</button> </> ) }
这个可以理解为弱化的redux。这边我们用库pubsub-js来写。写法如下:
//比如针对之前的输入案例,我需要给兄弟组件传一个值value,如果不用props,我们该怎么写 Bro: export default class Bro extends Component { componentDidMount() { this.sonData = PubSub.subscribe("brother",(msg,data)=>{ console.log("Bro Component have recived the msg",data); }) } componentWillUnmount() { PubSub.unsubscribe(this.sonData) } render() { return ( <> <div>brother</div> </> ) } } Son: export default class Son extends React.PureComponent{ changeValue = ()=>{ PubSub.publish("brother",this.inputRef.value) } render() { return ( <> <input type="text" placeholder={"请输入您的值"} ref={(el)=>{this.inputRef = el}}/> <button onClick={this.changeValue}>change</button> </> ) } }
这个方法常用的就是三个api,第一个subscribe,发布的相应的事件,并且定义事件要做什么事。第二个是publish,订阅发布的事情,并且传入相应要改变的值。第三个是unsubscribe用来取消发布的事情,做内存的优化。
以上就是关于react的props属性的介绍,希望本文对大家学习和理解react的props属性有帮助,想要继续了解react的state、refs属性,大家可以关注群英网络其它相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
用jquery实现省市区联动的方法:1、创建一个HTML示例文件;2、在js文件中通过“$(function() {for(var i = 0; i < prvo.length; i++) {...}}”方法实现省市区联动即可。
许多朋友遇到React Native 无法链接模拟器的问题,怎么解决呢,本文给大家分享完整简便解决方法及配置例题,对React Native 链接模拟器相关知识感兴趣的朋友一起看看吧
这篇文章主要介绍了vue使用canvas手写输入识别中文,工作时遇到一些项目如:系统上的输入法使用不方便,客户要求做一个嵌入web网页的手写输入法。下面我们来看看文章得具体描述吧
本文介绍的JS解构的内容,什么是JS解构呢?ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,简单的了解完JS解构,接下来我们看数组解构、对象的解构赋值、字符串解构、解构赋值的应用等等。感兴趣的朋友就继续往下看吧。
这篇文章主要介绍了JavaScript的function函数详细,而我们的JavaScript脚本语言比较特殊,相对于C语言,它的参数是不需要数据类型加持的。返回值return,我就不过多描述,他是和 C语言通的,如果没写他就会自动返回undefined,下面一起来看看文章内容,需要的朋友可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008