reactjs - 如何调度一个动作来改变 React 中的初始上下文值?
问题描述
我context
为一个Overlay
组件创建了一个。这个上下文是负责visibility
的Overlay
。
import React from "react"
const Context = React.createContext({
visibility: false
})
export { Context }
我的Overlay
组件可见性取决于此context
:
import React, { useContext } from "react"
import { Context } from "./context"
const Overlay = ({ children }) => {
const { visibility } = useContext(Context)
return visibility &&
<div className={`absolute left-0 right-0 bg-black top-0 bottom-0 bg-black-50 rounded-xl flex flex-col align-baseline justify-center items-center`}>
{children}
</div>
}
export default Overlay
另一方面,我有一个More
组件负责显示Overlay
.
import React, { useContext } from "react"
import { MORE_ICON } from "../../../constants/icons"
import { Context as OverlayContext } from "../Overlay/context"
const More = () => {
// How to change the context visibility here
return (<img
src={MORE_ICON}
alt="Options"
className="ml-auto w-6 h-6 cursor-pointer"
/>)
}
export default More
我的问题是如何从More
组件更改上下文的值?
解决方案
大多数时候你会这样做的方式是在上下文中传递一个函数,它允许你改变上下文的某些方面。您在这里没有上下文提供程序,但在您的上下文提供程序包装器中,您可能会执行以下操作:
import { Context as OverlayContext } from "../Overlay/context";
import React from "react";
class OverlayContextProvider extends React.Component {
constructor(props){
super(props);
// bind the 'this' keyword to refer to the instance of the class
this.setVisibility = this.setVisibility.bind(this);
this.state = {
visibility: false,
setVisibility: this.setVisibility
}
}
setVisibility(nextValue){
this.setState({visibility: nextValue});
}
render(){
return (
<OverlayContext.Provider value={this.state}>
{this.props.children}
</OverlayContext.Provider />
)
}
}
在您的More
组件中,您可以使用上下文中的函数来更新上下文。
import React, { useContext } from "react"
import { MORE_ICON } from "../../../constants/icons"
import { Context as OverlayContext } from "../Overlay/context"
const More = () => {
const context = useContext(OverlayContext);
return (<img
src={MORE_ICON}
alt="Options"
className="ml-auto w-6 h-6 cursor-pointer"
// You can modify it from anywhere but just using an onClick example
onClick={() => context.setVisibility(false)}
/>)
}
export default More
推荐阅读
- python - Django sql-修改onclick函数
- c# - 从一个内容页面导航到另一个内容页面时菜单消失
- wordpress - Wordpress:> 显示为 >
- scala - 为什么 Scala By-Name 参数语法在删除 : 和 => 之间的空格时失败
- android - 添加网络检测代码后FAB的空指针异常(即使定义好)
- google-chrome - Chrome 扩展 webRequest 侦听器在 Chrome 启动时不起作用
- android - 无法解析 Google 登录类
- r - 通过查找 r 中 2 个日期之间的差异来聚合列
- facebook-graph-api - Instagram 图形 API 测试阶段
- docker - 在 Google Kubernetes Engine 中启用 Stackdriver 调试