簡體   English   中英

使用上下文 API 傳遞數據時值未定義

[英]Value is undefined while passing data with Context API

我正在嘗試將帶有上下文 API 的數據傳遞給子組件。 從組件中獲取值時,值變得undefined

組件層次結構

  • 將數據傳遞給組件MockTableUsecasePane
  • MainContent -> MockTable
  • MainContent -> AddMock -> TabContent -> UsecasePane

=> MockContext.js

import React, { useState, useEffect, createContext } from "react";
import axios from "axios";

export const MockContext = createContext();

// provider
export const MockProvider = (props) => {
  const [data, setData] = useState([]);
  
   // data fetch and setting the state

  return (
    <MockContext.Provider data={[data, setData]}>
      {props.children}
    </MockContext.Provider>
  );
};

  • 注意:我收到了 API 的回復。

現在在MainContent中,組件封裝如下:

// MainContent.js

import React from "react";
import { MockProvider } from "../MockContext";

const MainContent = () => {
  return (
    <MockProvider>
      <div>
        <CustomerTable />
        <AddMock />
        <MockTable />
      </div>
    </MockProvider>
  );
};

當我嘗試在MockTableUseCasePane中獲取數據時,值是undefined

// MockTable.js

import React, { useState, useEffect, useContext } from "react";
import { MockContext } from "./MockContext";

const MockTable = () => {

  const [data, setData] = useContext(MockContext);
  console.log(data);

  // rest of the code

}

請糾正我哪里出錯了:)

我也嘗試從上下文中傳遞一個字符串並在一個組件中獲取,例如:

return (
    <MockContext.Provider data={"Hello"}>
      {props.children}
    </MockContext.Provider>
  );

// in MockTable.js
const value = useContext(MockContext); ==> undefined

傳遞給Provider的正確 prop 是value而不是data (參見: Context.Provider


import React, { useState, useEffect, createContext } from "react";
import axios from "axios";

export const MockContext = createContext();

// provider
export const MockProvider = (props) => {
  const [data, setData] = useState([]);
  const fetchData = async () => {
    const response = await axios
      .get(config.App_URL.getAllRoute, {
        params: {
          customHostName: config.host,
          type: config.type,
        },
      })
      .catch((error) => {
        console.error(`Error in fetching the data ${error}`);
      });
    console.log(response.data);
    setData(response.data);
  };
  useEffect(() => {
    fetchData();
  }, []);

  return (
    <MockContext.Provider value={[data, setData]}>
      {props.children}
    </MockContext.Provider>
  );
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM