【发布时间】:2021-06-28 16:23:16
【问题描述】:
我是学习 React 的新手(没有后端,使用 Context API)。 在 Context Provider 中,我正在寻找一种从同一数据中设置两个 Hook 状态的方法。 进行单个 axios 调用(无需重新渲染)。 Provider 接受 App。有什么解决办法吗?
export const Context = React.createContext();
const MoviesProvider = ({ children }) => {
console.log("Context Affectations");
const [movies, setMovies] = React.useState(null);
const [selectedMovie, setSelectedMovie] = React.useState(null);
useEffect(() => {
console.log("Context useEffect 1");
const dataGet = externalData;
setMovies(dataGet);
});
useEffect(() => {
console.log("Context useEffect 2");
// SKIPPED PART
const dataGet = externalData;
setSelectedMovie(dataGet[0]);
// SKIPPED PART
});
在同一个useEffect中都试过了,第二个也被跳过了。
控制台:
Context Affectations
Context useEffect 1
Pass data
Context useEffect 2
Context Affectations
【问题讨论】:
-
dataGet工作了吗?从表面上看,React 的行为似乎符合预期,是您的 Axios 调用不起作用。 -
"dataGet" 工作正常,"movies" 更新得很好。为了避免本例中的多次调用(并排除 axios 行为),我使用了一个数据文件。
-
谢谢,确实在使用直接的 const "externalData" 有效,所以问题出在后面。
标签: reactjs use-effect use-state context-api