【问题标题】:adding multiple states in context provider with react hooks使用反应钩子在上下文提供者中添加多个状态
【发布时间】:2023-04-07 08:30:01
【问题描述】:

我想在我的上下文中添加两个状态。不确定如何传递两个状态的值 value={ [count, setCount], [percentage, setPercentage] } 这是正确的吗?并且还注意到只有百分比状态有效,并且由于某种原因它覆盖了我的计数状态。任何形式的帮助都会非常感谢您。下面是我的代码

import React, { useState, createContext } from 'react'
export const AppContext = createContext()

export const CounterProvider = props => {

const [count, setCount] = useState(1)
const [percentage, setPercentage] = useState(20)

return (
    <>
        <AppContext.Provider value={ [count, setCount], [percentage, setPercentage] }>
            {props.children}
        </AppContext.Provider>
    </>
)
}

我的其他组件如下

import React, { useState, useContext, useEffect } from 'react'
import { AppContext } from './AppContext'

const StepOne = () => {

const [percentage, setPercentage] = useContext(AppContext)
const percentageIncrement = () => {
    setPercentage(percentage + 80)
}

const [count, setCount] = useContext(AppContext)
const countIncrement = () => {
    setCount(count + 1)
}

【问题讨论】:

    标签: reactjs react-hooks use-context


    【解决方案1】:

    这里有 2 个选项,上下文的值可以是数组或对象。我看到您正在尝试使用数组选项并正确完成它看起来像这样

    <AppContext.Provider value={[ [count, setCount], [percentage, setPercentage] ]}>
      {props.children}
    </AppContext.Provider>
    
    const [[count, setCount], [percentage, setPercentage]] = useContext(AppContext)
    

    或

    更常见的方法是让对象具有有意义的键

    <AppContext.Provider value={{ count, setCount, percentage, setPercentage }}>
      {props.children}
    </AppContext.Provider>
    
    // this is equal to
    
    <AppContext.Provider value={{ count: count, setCount: setCount, percentage: percentage, setPercentage: setPercentage }}>
      {props.children}
    </AppContext.Provider>
    
    const {count, setCount, percentage, setPercentage} = useContext(AppContext)
    

    【讨论】:

    • 非常感谢这对我有用。我使用了更有意义的对象解构的常见方式。再次感谢!
    • @HassanHafez 总是乐于提供帮助,很高兴听到这个解决方案有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多