【发布时间】:2021-04-28 20:46:14
【问题描述】:
我有一个 LessonThemes 组件。我使用了一个钩子,然后我使用 context 在 Test 组件中应用逻辑,问题是我不明白如何从hook 并将其应用到 context 中。 export const CounterContext = createContext ([ ]); 我需要在CounterContext 内应用值color
LessonThemes.jsx
import React, {useState, useEffect, createContext} from "react";
import ThemeContext from "./ThemeContext";
export default function LessonThemes(props) {
const [color, setColor] = useState(localStorage.getItem("color"));
const [themes, setThemes] = useState([
{ name: "G", color: "green" },
{ name: "R", color: "red" },
{ name: "B", color: "blue" },
])
useEffect(() => {
localStorage.setItem("color", color);
})
const SideBarPageContent = (SideBarPageContentBackground) => {
localStorage.setItem('color', SideBarPageContentBackground);
setColor(SideBarPageContentBackground);
}
return (
<CounterContext.Provider value={[color, setColor]}>
{
themes.map((theme, index) => {
return (
<label key={index}>
<input
onChange={() => SideBarPageContent(theme.color)}
type="radio"
name="background"
/>{theme.name}</label>
);
})
}
</CounterContext.Provider>
);
}
export const CounterContext = createContext([]);
Lesson.js
import React, { useContext } from "react";
import "./css/Sidebar.css";
export default function Test(props) {
const [color] = useContext(CounterContext);
return (
<div className="page-wrapper chiller-theme toggled">
<LessonThemes />
<div style={{background: color}}>
<i className="fas fa-bars"></i>
</div>
</div>
);
}
【问题讨论】:
-
你可以使用
useContext -
createContext([]);创建一个上下文,如果没有提供者位于 React 组件树中的消费者之上,则传递给它的参数是默认值。<CounterContext.Provider value={[color, setColor]}>为出现在其下方组件树中的任何使用者提供CounterContext(提供的值与提供给 Provider value 属性的值相同)。当同一上下文的多个提供者出现在组件树中时,使用最相关的上下文(组件树中最近的提供者)。
标签: javascript reactjs react-hooks components react-context