javascript - 如何从 Laravel Blade 传递 React 全球商店提供者的默认状态?
问题描述
我已经为我的应用程序设置了一个全局存储,使用这样的 React Context API:
class App extends Component {
render() {
return (
<SettingsProvider>
<Items />
</SettingsProvider>
);
}
}
render(<App />, document.getElementById('app'));
mu 提供者看起来像这样:
const defaultState = {test:'test'}
function SettingsProvider({children}) {
const [state, dispatch] = React.useReducer(settingsReducer, defaultState);
return (
<SettingsContext.Provider value={{ state, dispatch }}>
{children}
</SettingsContext.Provider>
)
}
一切都按预期工作。但现在我想将 defaultState 从 Laravel 传递给 SettingsProvider,而不是在我的 javascript 中定义它,使用如下所示:
<div id="app" defaultstate="{{$state}}"></div>
但我还没有弄清楚,如何从我的 SettingsProvider 访问这些值......我该如何实现呢?
解决方案
React 不知道 HTML 属性。您需要将defaultState
Blade 模板中的属性作为道具传递给App
组件,然后将道具传递给SettingsProvider
组件。
应用程序.jsx
class App extends Component {
render() {
return (
<SettingsProvider defaultState={this.props.defaultState}>
<Items />
</SettingsProvider>
);
}
}
if (document.getElementById('app')) {
// find element by id
const element = document.getElementById('app')
// Get element's defaultState attribute
const defaultState = element.getAttribute('defaultState')
// render element
render(<App defaultState={defaultState} />, element);
}
SettingsProvider.jsx
const initialState = {test:'test'}
function SettingsProvider({children, defaultState}) {
const [state, dispatch] = React.useReducer(
settingsReducer,
//This will override initialState entries with the values you passed via Blade
{
...initialState,
...defaultState
}
);
return (
<SettingsContext.Provider value={{ state, dispatch }}>
{children}
</SettingsContext.Provider>
)
}
推荐阅读
- r - 为什么我在这段代码之后得到这个输出?解释
- c - 从特定索引开始复制数组的 x 元素的最快方法
- html - 将元素排列在相同高度上,标题中的行数不同
- windows - IIS Express 使用“虚构的”SSL 证书
- c++ - 如何在一组迭代器上调用“find”,通过迭代器指向的内容进行查找?
- mongodb - 无法从嵌套数组中提取并使用 MongoTemplate 查询返回子文档
- c# - XML Serializer 获取对象类型的目的是什么?
- apache-spark - S3 - Spark - Avro 读取问题
- r - 在 igraph 网络中显示一个标签 pr 组
- amazon-redshift - 访问 Redshift 外部表所需的最低权限