在 React 中使用 Provider 传递对象数组

Posted

技术标签:

【中文标题】在 React 中使用 Provider 传递对象数组【英文标题】:Passing an array of Object using Provider in React 【发布时间】:2022-01-23 17:19:38 【问题描述】:

我已从 https://api.github.com/users 获取以下 API,并尝试使用 React 通过提供程序共享数组。我怎样才能做到这一点?

export const dataArray = createContext();

function ApiData() 

    // Assign the Array and set it an empty array
    const [users, setUsers] = useState([]);
    const [loadDataState, setloadDataState] = useState(false) // Initates a loadData variable to set initial state as false

    const baseUrl = 'https://api.github.com/users'

    useEffect( () => 
        axios.get(baseUrl)
            .then((Response) => 
            
                console.log('========== Github Api  ==========')
                setUsers(Response.data)
                console.log('Json Array', Response.data)
                console.log('User Array', users);
                console.log('=================================')
                setloadDataState(true);
            )
            .catch(error => console.error(error))
    , []);
    
    return (
        <>
            <dataArray.Provider>
                
            </dataArray.Provider>
        </>
    )


export default ApiData  

【问题讨论】:

【参考方案1】:

如果您想使用状态提供程序,我建议您使用 Redux(如果您正在处理具有复杂状态的项目),如果不是,您可以使用 Contexte API 进行简单的逻辑。

如果您只想将 Array 传递给组件,您可以在 props 中传递它,如下所示:

return (
<YourComponent users=users/>
)

在 YourComponent.js 中

function YourComponent(props) 
return (
<p>props.users</p>
)

export default YourComponent;

【讨论】:

【参考方案2】:

当你使用反应上下文时,Provider 可以有一个value 属性,它将接收将提供给所有使用上下文的子组件的数据。

<MyContext.Provider value=/* some value */>

如果value props 没有提供,那么将提供给子组件的值就是你调用React.createContext 时提供的值

const MyContext = React.createContext(defaultValue);

【讨论】:

使用 Provider 和仅将数组作为 prop 传递有什么区别? 使用 Provider 作为上下文的一部分,您不必在需要时将每次数据作为道具传递给每个子组件,您可以直接使用上下文,您将可以访问提供的数据在MyContext.Provider 包装器上。 谢谢你的解释,这样不是效率低吗?也许代码更简洁,但只传递将要使用的变量更有意义..

以上是关于在 React 中使用 Provider 传递对象数组的主要内容,如果未能解决你的问题,请参考以下文章

[react] Consumer向上找不到Provider的时候怎么办?

如何创建一个`context.Provider` /`context.Consumer`-like结构来传递bot应用程序中的值?

React使用context进行组件通信

如何在提供者的值中传递数组和 setArray(React、Typescript、Context)

React中不常用的功能——Context

06.React组件进阶(二)Context