message

message

我想着不用接收父组件传过来的showToastText,直接使用Toast组件里的showToastText,逻辑上感觉也走的通,但是我试了下,不行,一定要父传子,不明白为什么一定要父传子

<template>
    <div class="toast">
        {{showToastText}}
    </div>
</template>
<script>
import { reactive,toRefs } from 'vue';
export const useToastEffect=()=>{
    const toastData=reactive({
        showToast:false,
        showToastText:''
    })
    const toastFn=(meg)=>{
        toastData.showToast=true;
        toastData.showToastText=meg;
        setTimeout(()=>{
            toastData.showToast=false;
            toastData.showToastText='';
        },2000)
    }
    const {showToast,showToastText}=toRefs(toastData);
    return {showToast,showToastText,toastFn}
}
export default {
    name:'Toast',
    setup(){
        const {showToastText}=useToastEffect();
        return {showToastText}
    }
}

</script>
<style lang="scss" scoped>
@import "../style/variables.scss";
.toast{
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    padding: .1rem;
    background: rgba(0, 0, 0, .35);
    border-radius: .05rem;
    color: $color-white;
}
</style>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕久久 2023-08-01 10:22:20

同学你好,可以理解成vue底层处理不好同学的这种写法,逻辑上感觉可以,但是vue底层并不认为这是一种好的方式,它有自己的书写规定。父子组件传值,最好要通过父组件修改子组件的数据:

https://img1.sycdn.imooc.com//climg/64c86c43094c4a8a06620112.jpg

vue这里,尽量按照它支持的写法写,否则效果可能不对。

祝学习愉快!

  • 提问者 慕芸芸 #1

    父传子不是单向数据流吗,父组件不能修改子组件的数据?

    2023-08-01 10:43:18
  • 好帮手慕久久 回复 提问者 慕芸芸 #2

    没理解同学的意思,父传子是单项数据流,父传子的一个目的就是修改子组件的数据。

    2023-08-01 11:14:37
  • 提问者 慕芸芸 回复 好帮手慕久久 #3

    你是说在父组件中给 toastFn 函数传值时,并没有修改子组件的值吗?

    2023-08-01 12:32:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师