javascript - 如何在反应js中侦听另一个组件中的下拉值
问题描述
我是新手。我有一个下拉菜单,它为我提供了不同的语言来选择我想分享给我的所有组件,但我做不到。到目前为止,我已经尝试过 localStorage 和 Context,但是每当我更改值时,我都看不到 App.js 中的更改。
这是我的组件
const RTL = () => {
const handleLanguageAction = lang => {
console.log(lang , 'language')
};
return (
<OptionsButton
list={portalLanguages}
float="right"
helper="Please select any language"
label="Language"
action={handleLanguageAction}
/>
);
};
这是我的 app.js
const App = ({ role }) => {
return (
<MuiThemeProvider theme={theme}>
<MuiPickersUtilsProvider utils={MomentUtils}>
<SnackbarProvider>
<BrowserRouter>
<div dir={DIR}>
<Layout>
<RouteFactory routes={RouteComponents} config={routesConfig} role={role} />
</Layout>
</div>
</BrowserRouter>
</SnackbarProvider>
</MuiPickersUtilsProvider>
</MuiThemeProvider>
);
};
我希望 app.js 监听下拉功能中的值变化,即使我刷新页面也应该保留该值。有人能帮我吗?谢谢
解决方案
您可以使用 customEvent 在 RTL 和 App 之间进行通信
RTL
const myEvent = new CustomEvent('language', { detail: { lang } });
document.body.dispatchEvent(myEvent);
应用程序.js
document.body.addEventListener("language", (event) => {
console.log(event.detail);
});
推荐阅读
- angular - 使用 Angular 在 HTTP 调用中获取表单数据
- python - 如何使用 python3 在 b'\\xe5' 和 b'\xe5' 之间转换?
- amazon-web-services - 获取文件内容作为 Terraform 输出
- javascript - 从 FIrebase 实时数据库中获取数据
- react-native-firebase - 链接帐户时如何从“auth/credential-already-in-use”错误中恢复
- java - 如何通过托管 Bean 在类中设置属性?
- java - 邮递员表单数据发送带有文件的复杂对象
- java - 如何修复java下载按钮连续单击ClientAbortException:java.io.IOException错误?
- angular - 如何在 Ionic 中以编程方式触发管道?
- tensorflow - Tensorflow js:如何将 Frozen 模型转换为网络友好格式?