javascript - 如何在反应中使用上下文在类和功能组件之间共享状态?
问题描述
我有一个顶级上下文提供程序,然后是一个父类组件,然后是一个功能性无状态子项。
我可以从子级更新我的上下文值,但不能从父级更新,即使父级中的值更新。
如何使用上下文在两个组件之间更新和共享状态?
import React from "react";
import ReactDOM from "react-dom";
const Context = React.createContext();
const Provider = ({ children }) => {
const [value, setValue] = React.useState(0);
return (
<Context.Provider value={{ value, setValue }}>{children}</Context.Provider>
);
};
const Child = () => {
const { value, setValue } = React.useContext(Context);
return <div onClick={() => setValue(value + 1)}>Plus plus!!</div>;
};
class Parent extends React.Component {
render() {
const { value, setValue } = this.context;
return (
<div>
<div onPress={() => setValue(value - 1)}>MINUS MINUS!</div>
<div>{this.props.children}</div>
<h1>{value}</h1>
</div>
);
}
}
Parent.contextType = Context;
function App() {
return (
<Provider>
<Parent>
<Child />
</Parent>
</Provider>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
解决方案
将“onPress”更改为“onClick”即可。我已经测试过了。
推荐阅读
- r - 忽略第一次提及,但在 R 列中标记重复项
- amazon-s3 - 向 S3 存储桶添加策略时获取“缺少必填字段 Principal”
- r - 为什么堆积条形图中负值的填充顺序相反?(R,ggplot2)
- python - Python Django Admin 不显示 CSS
- javascript - Javascript Count-Up timer 从行列中的时间戳
- c++ - 错误:传递'const string {aka const std::basic_string
}' 作为 ...丢弃限定符的 'this' 参数 [-fpermissive] - neo4j - 如何使用普通密码查询创建和更新节点和属性?
- html - 为什么图标和文字在同一行?
- excel - 嵌套循环以添加定义长度的数量
- here-api - Oauth 1.0 签名 - 签名不匹配。授权签名或客户端凭证错误