此处的myDisplay为什么不随着父组件传入isDIsplay值改变而改变?
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
问题的原因是在AlertBox组件中使用了useState来定义myDisplay状态,但是useState只在组件首次渲染时被调用,并且将初始状态值赋给变量myDisplay。之后,myDisplay的值保持不变,不会受到父组件传入的isDisplay值的变化影响。
解决这个问题的方法是使用React的生命周期方法来监听父组件传入的isDisplay值的变化,并在变化时更新myDisplay的值。
具体的解决方案如下:
- 在AlertBox组件中引入
useEffect
和useState
:
import React, { useEffect, useState } from 'react';
- 在AlertBox组件中定义一个新的状态变量
myDisplay
,并将其初始值设置为props传入的isDisplay值:
const [myDisplay, setMyDisplay] = useState(props.isDisplay);
- 使用
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状态也会随之变化。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 在AlertBox组件中引入
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境