reactjs - 变量不适用于createContext,我应该如何通过状态传递它
问题描述
import React, { useState, createContext } from "react";
export const MovieContext = createContext();
const MovieProvider = (props) => {
const [movies, setMovies] = useState([
{
name: "Super Man and The Silly Wonder Woman",
price: " 54£",
id: 21,
},
{
name: "League Of Sheppards",
price: " 54£",
id: 81,
},
{
name: "Mr Marin The Billionaire",
price: " 54£",
id: 21,
},
]);
return (
<div>
<MovieContext.Provider>{props.children}</MovieContext.Provider>
</div>
);
};
export { MovieProvider };
import React from "react";
import { StyledMovie } from "./movie-list.style";
import { Movie } from "../movie/movie.components";
const MovieList = () => {
return (
<StyledMovie>
{movies.map((movie) => (
<Movie name={movie.name} price={movie.price} key={movie.id} />
))}
</StyledMovie>
);
};
export { MovieList };
解决方案
您需要将value
道具传递给提供者
import React, { useState, createContext } from "react";
export const MovieContext = createContext();
const MovieProvider = (props) => {
const [movies, setMovies] = useState([
{
name: "Super Man and The Silly Wonder Woman",
price: " 54£",
id: 21,
},
{
name: "League Of Sheppards",
price: " 54£",
id: 81,
},
{
name: "Mr Marin The Billionaire",
price: " 54£",
id: 21,
},
]);
return (
<div>
<MovieContext.Provider value={movies}>{props.children}</MovieContext.Provider>
</div>
);
};
export { MovieProvider };
并使用useContext
. 您需要导入MovieContext
.
import React,{useContext} from "react";
import { StyledMovie } from "./movie-list.style";
import { Movie } from "../movie/movie.components";
const MovieList = () => {
const movies = useContext(MovieContext);
return (
<StyledMovie>
{movies.map((movie) => (
<Movie name={movie.name} price={movie.price} key={movie.id} />
))}
</StyledMovie>
);
};
export { MovieList };
推荐阅读
- java - AsyncTask 直到最后才完成下载
- java - 比较 Java 中的 ANSI 彩色字符串
- javascript - 如何正确应用康威的生命游戏?
- javascript - 为什么我的输入在浏览器中运行时没有更新?- Javascript
- java - 计算Java日期时间时的负值
- javascript - 如何在另一个函数中传播一个函数?
- ghostscript - 如何使用 Ghostscript 设置 Postscript MediaBox、BleedBox 和 TrimBox
- javascript - 在包含 EditText 和 ArrayAdapter 的 ListView 上添加/删除项目
- javascript - ReactJS 语句名称
- r - R有条件地合并行