[英]React component not refreshing when state changed
我有一個將數組作為參數的 React 組件。 它從這個數組生成一個列表。 在父組件中,數組是一個狀態變量,每當更新該狀態變量時,我都希望將更改反映在子組件中。
發生的事情是組件被渲染一次,但沒有顯示任何更改。
應用程序.js:
import heatData from "./config/heats.json";
export default function App() {
const [selectedHeat, setSelectedHeat] = useState(heatData.heats.find((x) => x.heatNumber === 1));
const [selectedHeatNumber, setSelectedHeatNumber] = useState(1);
const heats = heatData.heats;
const heatEvents = ["EventA", "EventB", "EventC", "EventD"];
useEffect(() => {
const _selectedHeat = heatData.heats.find((x) => x.heatNumber === selectedHeatNumber);
setSelectedHeat(_selectedHeat);
}, [selectedHeatNumber]);
return (
<div>
<div>
<ul>
{heats.map((heat, i) => (
<li onClick={() => setSelectedHeatNumber(heat.heatNumber)}>
Heat #{heat.heatNumber}
</li>
))}
</ul>
<div>
{heatEvents.map((event, i) => (
// This renders once but when selectedHeat changes it doesnt re-render
<EventCard athletes={selectedHeat.athletes} />
))}
</div>
</div>
</div>
);
}
正在導入的 heats.json:
{
"heats": [
{
"heatNumber": 1,
"athletes": ["PersonA, PersonB, PersonC"]
},
{
"heatNumber": 2,
"athletes": ["PersonD, PersonE, PersonF"]
}
]
}
EventCard.js:
export default function EventCard({ athletes }) {
const [userPrediction, setUserPrediction] = useState([...athletes]);
// Add methods to manipulate userPrediction
return (
<table>
<tbody>
{userPrediction.map((athlete, i) => (
<tr key={i}>
<td>{athlete}</td>
<td>Up</td>
<td>Down</td>
</tr>
))}
</tbody>
</table>
);
}
這是過程:
heats.json
heats
以生成菜單,單擊該菜單時設置當前加熱問題是點擊按鈕會改變熱量,但 EventCard 中的運動員不會更新。
你應該這樣添加useEffect
您EventCard.js
部件,因為你設置的state
與運動員只有第一次和狀態不更新當道具的變化,所以你應該保持跟蹤變化props
,然后更新state
相應。 代碼沙盒
useEffect(() => {
setUserPrediction([...athletes]);
}, [athletes]);
或者您可以直接使用athletes
道具,例如:
{athletes.map((athlete, i) => (
<tr key={i}>
<td>{athlete}</td>
<td>Up</td>
<td>Down</td>
</tr>
))}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.