【发布时间】:2021-07-04 07:33:32
【问题描述】:
我想知道是否可以创建一个上下文并使用它而不将上下文传递到 dom 树的整个部分。
就此而言,我创建了以下示例:
./components/count-context.js
import * as React from 'react'
const CountContext = React.createContext({count : 0} )
const CountContextProvider = (props) => {
const [count, setCount] = React.useState(0);
const incrementCount = () => {
console.log("increment count", count)
setCount(count + 1);
};
const decrementCount = () => {
setCount(count - 1);
}
return (
<CountContext.Provider value={{ count, setCount, incrementCount, decrementCount }}>
{props.children}
</CountContext.Provider>
);
}
const CountDisplayNoProvider = (props) => {
const { count } = React.useContext(CountContext)
return (
<p>{count}</p>
)
}
const CountDisplaySelfProvided = (props) => {
const { count } = React.useContext(CountContext)
return (
<CountContextProvider>
<p>{count}</p>
</CountContextProvider>
)
}
const IncrementCountButton = (props) => {
const { count, incrementCount, setCount } = React.useContext(CountContext)
console.log(`count is a `, typeof(count))
console.log(`incrementCount is a `, typeof(incrementCount))
console.log(`setCount is a `, typeof(setCount))
return (
<button onClick={incrementCount}>IncrementCountButton</button>
)
}
export {
CountContextProvider,
CountDisplayNoProvider,
CountDisplaySelfProvided,
IncrementCountButton
}
还有:./App.js
import './App.css';
import { CountContextProvider, CountDisplaySelfProvided, CountDisplayNoProvider, IncrementCountButton} from './components/count-context'
function App() {
return (
<div className="App">
<p>NO CONTEXT</p>
CountDisplayNoProvider: <CountDisplayNoProvider />
<IncrementCountButton />
<br />
CountDisplaySelfProvided: <CountDisplaySelfProvided />
<IncrementCountButton />
<CountContextProvider>
<p>CountDisplayNoProvider inside CountContextProvider</p>
<CountDisplayNoProvider />
<IncrementCountButton />
</CountContextProvider>
</div>
);
}
export default App;
有趣的是 CountDisplayNoProvider 和 CountDisplaySelfProvided 都显示一个数字:0
但是 count-context.js:34 incrementCount 是未定义的 count-context.js:35 setCount 是未定义的
--- 那么为什么计数被传递给 NO CONTEXT,而不是函数?
更奇怪的是,为什么我不能将提供者放在计数自己的组件中? (CountDisplaySelfProvided)
谢谢!!
【问题讨论】:
标签: javascript reactjs react-context