如何更改功能组件中的上下文值?
Posted
技术标签:
【中文标题】如何更改功能组件中的上下文值?【英文标题】:How to change context value in functional component? 【发布时间】:2020-05-10 03:50:56 【问题描述】:我有一个名为 StatusContext
的上下文,如下所示:
export const statusCtxInit =
open: false,
toggleOpen()
this.open = !this.open;
;
const StatusContext = React.createContext(statusCtxInit);
export default StatusContext
整个应用程序都使用提供者进行包装:
// ...
<StatusContext.Provider value=statusCtxInit>
// ...
要使用我的上下文的值,我在我的 FC 中使用 useContext
,当我得到值时它会起作用。
function MyComp()
const status = useContext(StatusContext);
return (
<div>
status.open
? `It's Open`
: `It's Closed`
<button onClick=() => status.toggleOpen()>
Toggle
</button>
</div>
)
export default MyComp
另一方面,我也想通过调用toggleOpen
来更改上下文,但是它不能按我的意愿工作。实际上值会改变,但不会影响MyComp
。
我做错了什么?我该怎么办?
【问题讨论】:
statusCtxInit
不是 React 有状态组件
@DennisVash 我不知道你写了什么。是的,它只是一个简单的对象
@gaditzkhori 我不知道你写了什么。是的,它只是一个简单的对象
【参考方案1】:
const statusContext = React.createContext()
const Provider = statusContext
//custom provider
export const StatusProvider = (children) =>
const [isOpen, setOpen] = React.useState(false)
const toggle = () => setOpen(v => !v)
return (
<Provider value=isOpen, toggle>
children
</Provider>
)
//custom hook
export const useStatus = () => useContext(StatusContext)
//usage
function MyComp()
const status = useStatus()
return (
<div>
status.isOpen
? `It's Open`
: `It's Closed`
<button onClick=() => status.toggle()>
Toggle
</button>
</div>
)
export default MyComp
【讨论】:
以上是关于如何更改功能组件中的上下文值?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改保存在反应组件的 useRef 对象中的按钮的 onClick 功能?
如何在 ReactJS-输出 [object Object] 中的功能组件之间传递值?