爱编程的设计师 2023-09-17 15:37 采纳率: 94.4%
浏览 2
已结题

此处的myDisplay为什么不随着父组件传入isDIsplay值改变而改变?

此处的myDisplay为什么不随着父组件传入isDIsplay值改变而改变?

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-17 18:11
    关注

    【以下回答由 GPT 生成】

    问题的原因是在AlertBox组件中使用了useState来定义myDisplay状态,但是useState只在组件首次渲染时被调用,并且将初始状态值赋给变量myDisplay。之后,myDisplay的值保持不变,不会受到父组件传入的isDisplay值的变化影响。

    解决这个问题的方法是使用React的生命周期方法来监听父组件传入的isDisplay值的变化,并在变化时更新myDisplay的值。

    具体的解决方案如下:

    1. 在AlertBox组件中引入useEffectuseState:
    import React, { useEffect, useState } from 'react';
    
    1. 在AlertBox组件中定义一个新的状态变量myDisplay,并将其初始值设置为props传入的isDisplay值:
    const [myDisplay, setMyDisplay] = useState(props.isDisplay);
    
    1. 使用useEffect监听props传入的isDisplay值的变化,并在变化时更新myDisplay的值:
    useEffect(() => {
      setMyDisplay(props.isDisplay);
    }, [props.isDisplay]);
    

    完整的代码如下:

    import React, { useEffect, useState } from 'react';
    import { connect } from 'react-redux';
    import { useRef } from 'react';
    import MyAlert from '../components/MyStyles';
    import { changeAgeAction, changeNameAction } from '../redux/home/studentAction';
    
    export function AlertBox(props) {
      const student = props.stuArre;
      const contentArr = Object.keys(student);
      const nameText = useRef();
      const ageText = useRef();
      const alertBoxText = useRef();
      const { isDisplay, ID = props.ob } = props;
    
      const [myDisplay, setMyDisplay] = useState(props.isDisplay);
    
      useEffect(() => {
        setMyDisplay(props.isDisplay);
      }, [props.isDisplay]);
    
      const confirmText = (e) => {
        console.log(ageText.current.value);
        console.log(nameText.current.value);
        e.target.parentNode.parentNode.style.display = none;
        ageText.current.value = '';
        nameText.current.value = '';
      };
    
      const mouseEnter = (e) => {
        // 执行操作
      };
    
      // 其他代码...
    
      return (
        // 组件返回的JSX代码...
      );
    }
    
    export default connect(mapStateToProps, mapDispatchToProps)(AlertBox);
    

    通过上述方法,就能实现当父组件传入的isDisplay值发生变化时,AlertBox组件中的myDisplay状态也会随之变化。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 9月17日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP