React三大属性之props的使用详解
网络编程 2021-07-04 14:07www.168986.cn编程入门
这篇文章主要介绍了React三大属性之props的使用详解,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下
上期讲了,接下来讲讲props。props功能在于组件间通信(父子组件),说说在各种组件中的用法
类组件
//父组件传值 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写成的子组件
props是只读的
React在文档中强调
所有 React 组件都必须像纯函数一样保护它们的 props 不被更改。
纯函数的概念我们已经在redux中解释过了,总而言之,我们不能改变props的值。
组件间通信
现在来一下组件间通信:
- 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> </> ) }
- eventbus(订阅-发布机制)
这个可以理解为弱化的redux。这边我们用库pubsub-js来写。写法如下
//比如针对之前的输入案例,我需要给兄弟组件传一个值value,如果不用props,我们该怎么写 Bro: export default class Bro extends Component { ponentDidMount() { this.sonData = PubSub.subscribe("brother",(msg,data)=>{ console.log("Bro Component have recived the msg",data); }) } ponentWillUnmount() { 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的资料请关注狼蚁SEO其它相关文章!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程