子组件监听父组件消息,随之变化与不变化

父组件通过props传递给子组件消息,子组件有两种情况接收处理:

1、子组件监听父组件props的变化,同时随之变化【可以直接取props中的值展示,也可以监听值得变化处理

2、子组件初始化时更新,随后不再随父组件变化

示例:父组件代码:

import React, { useEffect, useState } from "react";
import ChildModal from "./components/childModal";
import "./index.less";
 
function App() {
    const [sum, setSum] = useState(0);

    const addSum = () => {
        setSum(sum + 1);
    }

    return (
        <>
            <div>当前数量为:{sum}</div>
            <div className="container" onClick={addSum}>点击加1</div>
            <ChildModal sum={sum} />
        </>
    );
}

// 导出App组件
export default App;

第一种情况示例【子组件监听父组件props的变化,同时随之变化】子组件代码:

可以直接取props中的值展示,也可以监听值得变化处理

a、【直接取props中的值】展示代码如下:

import React from "react";

const ChildModal = (props) => {
    console.log('props', props);

    return (
        <div>子组件的数量:{props.sum}</div>
    )
}
export default ChildModal;

b、【监听props值得变化】展示代码如下:

import React, { useEffect, useState } from "react";

const ChildModal = (props) => {
    console.log('props', props);
    const [sum, setSum] = useState(-1);

    useEffect(() => {
        setSum(props.sum);
    }, [props.sum])

    return (
        <div>子组件的数量:{sum}</div>
    )
}
export default ChildModal;

效果图:

 

第二种情况示例【子组件初始化时更新,随后不再随父组件变化】子组件代码:

import React, { useEffect, useState } from "react";

const ChildModal = (props) => {
    console.log('props', props);
    const [sum, setSum] = useState(-1);

    useEffect(() => {
        setSum(props.sum);
    }, [])

    return (
        <div>{sum}</div>
    )
}
export default ChildModal;

效果图:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,组件可以通过props来监听组件传递的组件可以通过props将数据传递给组件,并且组件可以通过监听props来实时获取最新的。 一个常见的方法是使用watch来监听props的变化。通过在组件中定义一个watcher函数来监听props的变化,并在变化时执行相应的操作。这样组件就可以实时获取组件传递的了。 另外,还可以通过使用computed属性来监听props。computed属性可以根据props的变化来计算出新的,并将其作为组件的数据。这样组件就可以直接使用computed属性来获取组件传递的。 还可以通过使用深度监听监听props的变化。在Vue中,可以通过在watch选项中设置immediate为true来开启深度监听。这样组件在初始化时就会立即监听props的变化,并在变化时执行相应的操作。 综上所述,Vue组件可以通过props来监听组件传递的,可以使用watch、computed属性或深度监听等方法来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue组件监听组件](https://blog.csdn.net/weixin_44116302/article/details/109171210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue组件监听组件变化随之改变](https://blog.csdn.net/qq_45524754/article/details/118334969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值