這是我的代碼:
export default function App() {
const [onProcess, setOnProcess] = useState("normal")
var myid = "123"
const [data, setData] = useState([]);
useEffect(() => {
fetch('https://api.npoint.io/0294bea2185268c9ac70')
.then((response) => response.json())
.then((json) => setData(json))
.catch((error) => console.log('ERR :', error))
},[]);
for (let x in data) {
if (data[x].client_id == myid) {
var set = data[x].situation
setOnProcess(set)
console.log(data[x].situation)
break
}
}
const rt_normal = (
<View style={styles.container}>
<Text> This is normal view </Text>
</View>
)
const rt_process = (
<View style={styles.container}>
<Text> This is process view </Text>
</View>
)
if (onProcess == "normal") {
return rt_normal
}
else if (onProcess == "_on_process") {
return rt_process
}
}
我得到的錯誤是:
:[渲染錯誤。太多的重新渲染。React 限制了渲染的數量以防止無限回圈。]
這是因為setOnProcess(set)代碼。我該如何解決這個問題?
uj5u.com熱心網友回復:
您應該洗掉for...in回圈并重構以利用useEffect.
useEffect(() => {
// Get a specific entry where client_id matches myId.
const filteredItem = data.find(item => item.client_id === myId);
// Perform a check as .find() can return undefined.
if(filteredItem.situation) {
setSituation(filteredItem.situation);
}
}, [data]);
uj5u.com熱心網友回復:
把for回圈放在一個useEffect
(未經測驗)示例:
useEffect(() => {
for (let x in data) {
if (data[x].client_id == myid) {
var set = data[x].situation;
setOnProcess(set);
console.log(data[x].situation);
break;
}
}
}, [data]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422635.html
標籤:
上一篇:從陣列中一一輸出變數
