【发布时间】:2021-06-03 21:45:37
【问题描述】:
我是一名学习 React 的学生。我正在制作一个使用功能性 React 的项目,hook。
当我在类类型 react 中使用 context api 时,componentDidmount 正在提供程序中工作。但是,当我在context 中使用功能反应时,useEffect 不起作用!我该如何解决?非常感谢!
BoardContext.js
import { createContext } from 'react';
const BoardContext = createContext();
export default BoardContext;
BoardProvider.js
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import BoardContext from './BoardContext';
const BoardProvider = ({ children }) => {
console.log('1. is working!!');
const [categoryData, setCategoryData] = useState([]);
useEffect(() => {
console.log('is not working in useEffect ');
fetchData();
}, []);
const fetchData = async () => {
console.log('not working');
const { data } = await axios('/data/categoryData.json');
console.log(data);
setCategoryData(data);
};
console.log('is working!');
return (
<BoardContext.Provider value={{ categoryData }}>
{children}
</BoardContext.Provider>
);
};
export default BoardProvider;
import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './Routes';
import GlobalStyle from './Styles/GlobalStyles';
import { ThemeProvider } from 'styled-components';
import BoardProvider from './BoardProvider';
import theme from './Styles/theme';
ReactDOM.render(
<BoardProvider>
<GlobalStyle />
<ThemeProvider theme={theme}>
<Routes />
</ThemeProvider>
</BoardProvider>,
document.getElementById('root'),
);
【问题讨论】:
-
代码乍一看还不错。显示日志后是否有任何输出或错误?
-
我刚刚上传了下一个错误!
-
你能告诉我们 TagModalCategory 组件还是你添加的那个
const {categoryData} = useContext(BoardContext) -
嗯,你的应用在第一次渲染时崩溃了。由于效果在 渲染后被调用,因此它们不会运行。该错误表明,您正在尝试访问未定义的
TagModelCategory.js中的变量categoryData。您忘记使用useContext了吗? -
天哪!我不知道!我解决了这个问题。太感谢了!我将更多地研究生命周期!
标签: javascript reactjs react-hooks react-context