javascript - 如何检测 React 中的 props 变化?
问题描述
我有 2 个组件:Radiobuttons
和RadioOutput
, whereRadioOutput
接受来自Radiobuttons
. 单击单选按钮后,我可以控制台记录道具更改,如下所示:
Radiobuttons.js
import React, { useState } from 'react';
import RadioOutput from './RadioOutput';
const Radiobuttons = () => {
const [cause, setCause] = useState(null);
const handleClick = (e) => {
setCause(e.currentTarget.value)
};
return (
<>
<input type="radio" id="html" name="fav_language" value="HTML" onClick={handleClick}/>
<label for="html">HTML</label><br />
<input type="radio" id="css" name="fav_language" value="CSS" onClick={handleClick}/>
<label for="css">CSS</label><br />
<input type="radio" id="javascript" name="fav_language" value="JavaScript" onClick={handleClick}/>
<label for="javascript">JavaScript</label>
<RadioOutput cause={cause}/>
</>
)
};
export default Radiobuttons;
RadioOutput.js
:
const RadioOutput = ({cause}) => {
console.log(cause);
return null;
};
export default RadioOutput;
我的问题是,有没有办法可以检测到cause
inside的变化RadioOutput
?也许是这样的:
const RadioOutput = ({cause}) => {
// on change of cause, do something;
return null;
};
解决方案
RadioOutput
causes
每当值更改时将自动重新渲染。但是如果你想执行一些只依赖于值变化的副作用cause
,你可以使用useEffect
钩子。
useEffect
cause
每当值更改时将执行该函数。
更多关于useEffect
这里
https://reactjs.org/docs/hooks-effect.html
import React, {useEffect} from "react";
const RadioOutput = ({cause}) => {
useEffect(()=>{
console.log("runs whenever cause changes")
},[cause])
return null;
};
推荐阅读
- tsql - 执行时间超过一分钟的查询
- android - keyguardmanager createConfirmDeviceCredentialIntent 显示在设备锁定屏幕上
- angular - 延迟加载 Angular 模块时编译停止 70%
- matlab - 是否可以在 App Designer 中向 xAxis 添加侦听器
- constructor - Dart:构造函数的扩展运算符
- php - 致命错误:未捕获的错误:调用未定义的方法 mysqli_stmt::fetch_assoc()
- javascript - 用 jest 测试文件上传
- javascript - 解码 Websocket 掩码
- javascript - jQueryUI datepicker 不显示下一个以前的三角形箭头
- performance - Angular 5 应用程序需要很长时间才能为初次使用的用户加载,我需要帮助来加快速度