亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我需要使用 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 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號