为了账号安全,请及时绑定邮箱和手机立即绑定

我需要使用 useEffect 来重新渲染组件吗?

我需要使用 useEffect 来重新渲染组件吗?

qq_遁去的一_1 2023-02-24 16:44:49
当 props 发生变化时,我在更新组件时遇到了问题。我使用 useEffect 让它工作,但不确定这是否是解决我的问题的正确方法。这是我的代码:import * as React from "react";import "./styles.css";const InputWithDefaultValue = (props: any) => {  const { value } = props;  //had to add this to get my component to rerender when the button in App-Component was pressed  React.useEffect(() => {    setText(value);  }, [value]);  const [text, setText] = React.useState(value);  return (    <input      value={text}      onChange={(e) => setText(e.currentTarget.value)}    ></input>  );};export const App = () => {  const [value, setValue] = React.useState("Foo");  return (    <div className="App">      <InputWithDefaultValue value={value} />      <button onClick={() => setValue(Math.random().toString())}>Update</button>    </div>  );};export default App;我在想,当我更新InputWithDefaultValue的道具时,它会被重新渲染。是使用 useEffect 让组件重新呈现解决问题的正确方法,还是我找到了一些 hacky-solution?
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您的解决方案是正确的。

当您向组件添加状态(即 with useState)时,组件将不再在其 props 更改时自动更新。相反,您必须使用效果并更新内部状态,就像您在代码中所做的那样。

这是一个相关的问题:React.useState does not reload state from props


查看完整回答
反对 回复 2023-02-24
?
炎炎设计

TA贡献1808条经验 获得超4个赞

你基本上已经“将 props 分叉到状态中”——此时你负责自己处理状态变化。另一种选择可能是undefined默认为用户编辑的文本设置状态,然后执行类似value={userText !== undefined ? userText : props.value}



查看完整回答
反对 回复 2023-02-24
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号