<i id='iNRcA'><tr id='iNRcA'><dt id='iNRcA'><q id='iNRcA'><span id='iNRcA'><b id='iNRcA'><form id='iNRcA'><ins id='iNRcA'></ins><ul id='iNRcA'></ul><sub id='iNRcA'></sub></form><legend id='iNRcA'></legend><bdo id='iNRcA'><pre id='iNRcA'><center id='iNRcA'></center></pre></bdo></b><th id='iNRcA'></th></span></q></dt></tr></i><div id='iNRcA'><tfoot id='iNRcA'></tfoot><dl id='iNRcA'><fieldset id='iNRcA'></fieldset></dl></div>

<small id='iNRcA'></small><noframes id='iNRcA'>

        • <bdo id='iNRcA'></bdo><ul id='iNRcA'></ul>

      1. <legend id='iNRcA'><style id='iNRcA'><dir id='iNRcA'><q id='iNRcA'></q></dir></style></legend>
        <tfoot id='iNRcA'></tfoot>

        在 React JS 中使用路由器时如何使用 Context API 传递状态

        How to use Context API to pass down a state while using a Router in React JS(在 React JS 中使用路由器时如何使用 Context API 传递状态)
          <tbody id='Vs3Cj'></tbody>

          <legend id='Vs3Cj'><style id='Vs3Cj'><dir id='Vs3Cj'><q id='Vs3Cj'></q></dir></style></legend>

          <small id='Vs3Cj'></small><noframes id='Vs3Cj'>

            <bdo id='Vs3Cj'></bdo><ul id='Vs3Cj'></ul>
              <i id='Vs3Cj'><tr id='Vs3Cj'><dt id='Vs3Cj'><q id='Vs3Cj'><span id='Vs3Cj'><b id='Vs3Cj'><form id='Vs3Cj'><ins id='Vs3Cj'></ins><ul id='Vs3Cj'></ul><sub id='Vs3Cj'></sub></form><legend id='Vs3Cj'></legend><bdo id='Vs3Cj'><pre id='Vs3Cj'><center id='Vs3Cj'></center></pre></bdo></b><th id='Vs3Cj'></th></span></q></dt></tr></i><div id='Vs3Cj'><tfoot id='Vs3Cj'></tfoot><dl id='Vs3Cj'><fieldset id='Vs3Cj'></fieldset></dl></div>
            • <tfoot id='Vs3Cj'></tfoot>

                  本文介绍了在 React JS 中使用路由器时如何使用 Context API 传递状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个上下文 API 文件设置,它有一个状态和一个从 API 获取数据并设置状态的函数,我想将状态传递给我的其他组件.在我的 App.js 中,我使用 React-Router 来指定路由.如何在使用 React-Router 的同时使用 Context API 将状态传递给这些组件.

                  我的 ApiContext.js 文件如下所示:

                  import React, {useState, createContext } from 'react';导出 const ApiContext = createContext();export const ApiProvider = async (props) =>{常量 [数据,setData] = useState(null);const getURL = 'https://examplefetchsite.com';常量响应 = 等待 fetch(getURL).json();设置数据(响应);返回 (<ApiContext.Provider value={[data, setData]}>{props.children}</ApiContext.Provider>);}

                  我的 App.js 的返回是这样的:

                  返回 (<ApiProvider><路由器>

                  <导航栏/><开关><Route path="/" 确切组件={ Dashboard }/><Route path="/create" 组件={ 创建 }/><Route path="/view" 组件={View}/></开关></div></路由器></ApiProvider>)

                  解决方案

                  就上下文本身而言,您不必更改提供程序中的任何内容,只需在子组件中执行以下操作:

                  import React, {useContext} from 'react'从./ApiContext"导入 {ApiContext}const仪表板=(道具)=>{const [数据,setData] = useContext(ApiContext)//你应该可以同时访问数据和setData返回 (//事物)}

                  但是在 ApiContext.js 中,您没有正确调用 API 请求.您应该使用 useEffect 仅在第一次渲染时获取数据.

                  import React, {useState, createContext, useEffect} from 'react';导出 const ApiContext = createContext();导出 const ApiProvider = (props) =>{常量 [数据,setData] = useState(null);使用效果(异步()=>;{const getURL = 'https://examplefetchsite.com';常量响应 = 等待 fetch(getURL).json();设置数据(响应);}, [])返回 (<ApiContext.Provider value={[data, setData]}>{props.children}</ApiContext.Provider>);}

                  I have a Context API file setup which has a state and a function which fetches data from an API and sets the state, and i want to pass the state down to my other components. In my App.js, I am using React-Router to specify the routes. How do i pass the state down to these components using Context API, whilst using React-Router.

                  My ApiContext.js file looks like this :

                  import React, {useState, createContext } from 'react';
                  
                  export const ApiContext = createContext();
                  
                  export const ApiProvider = async (props) => {
                      const [data, setData] = useState(null);
                  
                      const getURL = 'https://examplefetchsite.com';
                      const response = await fetch(getURL).json();
                      setData(response);
                      return (
                          <ApiContext.Provider value={[data, setData]}>
                              {props.children}
                          </ApiContext.Provider>
                      );
                  }
                  

                  My App.js's return looks like this :

                  return (
                        <ApiProvider>
                          <Router>
                            <div>
                              <NavBar />
                              <Switch>
                              <Route path="/" exact component={ Dashboard } />
                              <Route path="/create" component={ Create } />
                              <Route path="/view" component={View} />
                              </Switch>
                            </div>
                          </Router>
                        </ApiProvider>
                      )
                  

                  解决方案

                  In terms of the context itself, you don't have to change anything in your provider and only do something like this in the child components:

                  import React, {useContext} from 'react'
                  import {ApiContext} from './ApiContext'
                  
                  const Dashboard = (props) => {
                      const [data, setData] = useContext(ApiContext)
                  
                      //you should have access to both data and setData
                  
                      return (
                          //things
                      )
                  }
                  

                  However in the ApiContext.js you aren't calling the API request properly. You should use useEffect to fetch the data only on the first render.

                  import React, {useState, createContext, useEffect} from 'react';
                  
                  export const ApiContext = createContext();
                  
                  export const ApiProvider = (props) => {
                      const [data, setData] = useState(null);
                  
                      useEffect(async () => {
                          const getURL = 'https://examplefetchsite.com';
                          const response = await fetch(getURL).json();
                          setData(response);
                      }, [])
                  
                      return (
                          <ApiContext.Provider value={[data, setData]}>
                              {props.children}
                          </ApiContext.Provider>
                      );
                  }
                  

                  这篇关于在 React JS 中使用路由器时如何使用 Context API 传递状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Pause youtube video, youtube api(暂停 youtube 视频,youtube api)
                  Youtube iframe api not triggering onYouTubeIframeAPIReady(Youtube iframe api 未触发 onYouTubeIframeAPIReady)
                  How can I stop a video with Javascript in Youtube?(如何在 Youtube 中停止使用 Javascript 的视频?)
                  Embed YouTube video - Refused to display in a frame because it set #39;X-Frame-Options#39; to #39;SAMEORIGIN#39;(嵌入 YouTube 视频 - 拒绝显示在框架中,因为它将“X-Frame-Options设置为“SAMEORIGIN)
                  How to call Greasemonkey#39;s GM_ functions from code that must run in the target page scope?(如何从必须在目标页面范围内运行的代码中调用 Greasemonkey 的 GM_ 函数?)
                  How do you mute an embedded Youtube player?(如何使嵌入式 Youtube 播放器静音?)
                    <legend id='qqFEf'><style id='qqFEf'><dir id='qqFEf'><q id='qqFEf'></q></dir></style></legend>

                        <tbody id='qqFEf'></tbody>
                        • <bdo id='qqFEf'></bdo><ul id='qqFEf'></ul>
                        • <tfoot id='qqFEf'></tfoot>

                            <i id='qqFEf'><tr id='qqFEf'><dt id='qqFEf'><q id='qqFEf'><span id='qqFEf'><b id='qqFEf'><form id='qqFEf'><ins id='qqFEf'></ins><ul id='qqFEf'></ul><sub id='qqFEf'></sub></form><legend id='qqFEf'></legend><bdo id='qqFEf'><pre id='qqFEf'><center id='qqFEf'></center></pre></bdo></b><th id='qqFEf'></th></span></q></dt></tr></i><div id='qqFEf'><tfoot id='qqFEf'></tfoot><dl id='qqFEf'><fieldset id='qqFEf'></fieldset></dl></div>

                            <small id='qqFEf'></small><noframes id='qqFEf'>