react的props属性怎样理解?用法是什么?
Admin 2021-08-30 群英技术资讯 1660 次浏览
//父组件传值
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录表单校验背景常规写法:策略模式介绍真实世界类比更广义的“算法”策略模式的组成利用策略模式改写策略模式优缺点优点:缺点:策略模式适合应用场景总结表单校验背景假设我们正在编写一个注册页面,在点击注册按钮之时,有如下几条校验逻辑:用户名不能为空密码长度不能少于6位手机号码必须符合格式常规写法:const form = d
本篇文章给大家带来了关于JavaScript的相关知识,其中主要整理了日期对象Date的相关问题,包括了Date对象的创建、Date对象的方法等等内容,下面一起来看一下,希望对大家有帮助。
NgModule 模块是Angular种一个重要的点,因为Angular的基本构造块就是NgModule。本篇文章就来带大家了解一下Angular中的NgModule模块,希望对大家有所帮助!
调用对象的[Symbol.iterator]方法得到迭代器,并调用其next方法。循环判断迭代是否结束,否则取出结果的value属性值。
这篇文章主要介绍了详解react组件通讯方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008