javascript - 反应useEffect触发器虽然依赖值保持不变?
问题描述
为什么尽管我没有执行 setTest 来更改测试值,但日志仍然触发?我希望第一次日志不应该触发,因为测试值保持为 0?
function App() {
const [test, setTest ] = useState(0)
useEffect(() => {
console.log('log')
}, [test])
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
我有这样的场景。在第一次加载时不做任何事情,然后如果用户在页面上选择一个选项然后做某事,我该如何使用 useEffect 来做到这一点?
解决方案
来自 https:使用效果挂钩
useEffect 有什么作用?通过使用这个 Hook,你告诉 React 你的组件需要在渲染之后做一些事情。React 会记住您传递的函数(我们将其称为“效果”),并在执行 DOM 更新后稍后调用它。
您的组件被渲染、useEffect
触发,并且您的日志运行。
听起来你可能会混淆useEffect
(它只接受一个参数,一个回调)与其他接受多个参数的钩子。
---- 编辑(评论相关)----
useEffect
不是基于类和方法的直接替代,但由于它运行的时间,它通常可以用来替代那些方法。 请参阅 以获取更多信息。您可能还想阅读相关的钩子。componentDidMount
componentDidUpdate
useLayoutEffect
如果您的意图是在“加载”时连接一些逻辑,例如事件处理程序,则不需要挂钩来执行此操作。相反,您只需要一个 React 事件处理程序属性,例如。
<option onChange={changeHandler} />
(有关详细信息,请参阅。)
推荐阅读
- swift - SwiftUI 无法通过 UIColor(patternImage:) 创建颜色
- swift - Swift 和 Firebase 错误:无法将“UITextField”类型的值转换为预期的参数类型“字符串”
- typescript - 对流控制器不向区块链添加模型
- sql - 文本枢轴问题
- reactjs - TypeScript - 检查未知类型的变量是否具有某些属性
- php - Symfony Doctrine 查询构建器查找具有多对一关系的实体
- firebase - 在 Firebase Cloud Storage 中加载预览时出错
- excel - VBA 脚本运行缓慢
- mysql - 十二个月前的 SQL 查询计数数据
- php - 如何在登录时提示错误并重定向回登录页面 PHP MySQLi?