开发者问题收集

如何更新存储在 React Context 中的 State 属性

2022-06-07
1455

我已经使用 React Context 创建了状态,但是当我尝试更新子组件中的状态属性时,它不起作用,有时是语法错误,有时是逻辑错误,有人可以帮助我吗?


in App.js 
  const [car, setCar] = useState();
  <AuthContext.Provider value={{ car, setCar }}>
      
          <NavigationContainer>
            {car ? (
              <CustomerHomeStackNavigator />
            ) : (
              <Splash></Splash>
            )}
          </NavigationContainer>

      </AuthContext.Provider>

在子组件中我想更新其 offer 属性但它不起作用,我这样做了但没有成功

const carContext = React.createContext();
carContext.setCar.data.offer= "1000"

汽车状态有这个数据对象


 Object {
  "aud": "The_Aud",
  "data": Object {
    "address": "delhi",
    "area": "delhi",
    "city": "delhi",
    "contactnumber": "122222222222",
    "offer": "20000000"
   
  },
  "exp": 1654602892,
  "iat": 1654599292,
  "iss": "The_claim",
  "nbf": 1654599302,
  "stakeHolder": "owner",
}
2个回答

setCar 不是对象,而是一个函数。您可以使用 useContext 获取值,可以像下面这样更新对象

const {car,setCar}= useContext(AuthContext);
setCar(prev => {...prev,data : {...prev.data,offer:"10000"}})

选项 2:

var updatedCar = {...car};
updatedCar.data.offer = "1500";
setCar(updatedCar)
Okan Karadag
2022-06-07

setCar 是函数,因此要进行更新,您必须调用函数而不是简单的变量赋值。 接下来,要获取上下文,如果您要使用类组件,则必须使用 useContext 钩子或静态字段 context 。您不能使用 createContext 获取上下文值,它仅用于创建上下文对象。

const { car, setCar } = useContext(AuthContext)
// ...
setCar(data)

有关更多详细信息,请参阅文档 https://reactjs.org/docs/context.html#updating-context-from-a-nested-component

bitvalser
2022-06-07