reactjs - 反应钩子内的反应类组件 - DOM不更新
问题描述
我有以下组成:
const HookComponent = (props)=> {
let [month, changeMonth] = useState(moment());
return (
<ChildComponent
month={month}
onChange={m => changeMonth(m)}
minStep={5}
prevMonthIcon="ion-ios-arrow-left"
nextMonthIcon="ion-ios-arrow-right"
/>
)
}
ChildComponent 是一个类组件,它使用 setState 更新月份。上面的问题是更改没有反映在 DOM 上,而是父组件中的状态正在更改(通过用户输入 - 按钮更改 ChildComponent 中的状态)。我记录了它并确认父母的月份正在改变。在钩子中使用类组件时,这是反应的一些限制吗?
当我将 HookComponent 转换为类组件并使用 setState 更改月份时,它会按预期工作,并且 DOM 在输入更改时发生更改。
解决方案
该InputMoment
组件似乎没有使用month
道具,而是使用道具moment
。
此外,它似乎返回了作为道具InputMoment
传递的同一时刻实例。moment
这导致当您执行changeMonth
语句时,由于引用没有改变,因此不会重新渲染元素。
您可以通过在状态中存储对象来解决此问题。当您调用时,changeMonth
您传递一个新对象,InputMoment
然后正确地重新渲染:
const HookComponent = (props)=> {
let [month, changeMonth] = useState({ m: moment() });
return (
<ChildComponent
moment={month.m}
onChange={m => changeMonth({ m })}
minStep={5}
prevMonthIcon="ion-ios-arrow-left"
nextMonthIcon="ion-ios-arrow-right"
/>
)
}
推荐阅读
- regex - 正则表达式匹配来自多个链接的文本
- kubernetes - 在 Kubernetes 中重新部署不会缩减旧的 Replica 集
- timestamp - 如何在 influxdb 中获取可用数据的日期范围?
- python - 使用贪婪和非贪婪正则表达式的问题
- javascript - 从两个文本框输入动态创建单选按钮矩阵
- shell - 如何添加分号;在每次使用 shell 脚本创建 ddl 语句之后
- python - 如何使用python免费发送短信?
- python - 将递归峰值查找转换为迭代
- laravel - laravel api没有响应
- php - PHP:用字符串替换 ID,基于解码的 JSON 数字