我是 React Native 的新手,我正在嘗試理解一些東西。下面我可以用 onPress1 更新狀態。當我按下 onPress2 時,出現“只讀”錯誤。但是在 onPress3 中,即使它直接更新狀態也不會出錯。它改變了 onPress2 和 onPress3 的整個狀態。如果 state 是一個變數,直接更改它會導致“只讀”錯誤。為什么當我一個一個地改變物件的第一個元素或所有元素時,它不會出錯?另外,為了只替換現有陣列的 1 個元素,是否可以直接只替換 1 個元素,類似于 onPress3?
import React, { useState } from 'react'
import { Button, Text, View } from 'react-native'
let data = [
{ word: "Strong" },
{ word: "Support" }
]
export default function WordSelect() {
const [list, setList] = useState(data)
const onPress1 = () => {
setList([
{ word: "Together" },
{ word: "Drunk" }
])
}
const onPress2 = () => {
list = [
{ word: "Together" },
{ word: "Drunk" }
]
}
const onPress3 = () => {
list[0] = { word: "Together" }
list[1] = { word: "Drunk" }
}
return (
<View style={{paddingTop:50}}>
<Button title='onPress1' onPress={()=>{onPress1()}}></Button>
<Button title='onPress1' onPress={()=>{onPress2()}}></Button>
<Button title='onPress1' onPress={()=>{onPress3()}}></Button>
<Text>{list[0].word} </Text>
<Text>{list[1].word} </Text>
</View>
)
}
uj5u.com熱心網友回復:
list是const這樣做list = something會拋出一個錯誤,這就是為什么onPress2崩潰。
onPress3不會拋出錯誤,因為您沒有重新分配list自己。正在做 :
const a = {b:1}
a.b = 2
很好,會更新a.b。
請注意,您應該始終使用setList來更新您的list. 只有onPress1正確的語法。
uj5u.com熱心網友回復:
根據 ReactJS 檔案,您只能使用setList提供的代碼中的回呼函式來更改 state 的值。所以基本上你必須通過函式改變 state 的值setList。
請[點擊此處][1]了解更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395413.html
標籤:javascript 反应原生 反应钩子 使用状态
上一篇:為什么這些鏈接不同并且作用相同?
