reactjs - 使用代替
问题描述
1-我想用“ModelStateProvider”包装“模型”组件,如下所示,但它不起作用。我搜索了谷歌,找不到任何实用的解决方案。我想知道是否有办法让它工作。
2-我想知道用“AuthStateProvider”之类的“ModelStateProvider”包装整个应用程序是否实用且有效,但请记住,我将仅使用“Model”组件来使用“ModelStateProvider”。
你能帮我想想吗?
谢谢 :]
const App = () => {
return (
<AuthStateProvider>
<Router>
<Navbar />
<main className='container'>
<Route exact path='/' component={Homepage} />
<Switch>
<Route exact path='/signin' component={Signin} />
<Route exact path='/signup' component={Signup} />
<ModelStateProvider>
<Route exact path='/model/:link' component={Model} />
</ModelStateProvider>
<Route exact path='/models' component={Models} />
<Route exact path='/profiles' component={Profiles} />
<PrivateRoute exact path='/account' component={Account} />
<PrivateRoute exact path='/publish' component={Publish} />
</Switch>
</main>
</Router>
</AuthStateProvider>
)
}
编辑: 在 Route 内渲染它修复了它。由于我需要路径,因此我将其作为道具传递。您可以在下面看到解决方案。
<Route
exact
path='/model/:link'
render={(path) => (
<ModelStateProvider>
<Model path={path} />
</ModelStateProvider>
)}
/>
解决方案
component
您可以使用隐式prop,而不是将 prop 传递给路由,children
这就是Switch 文档在 example 中显示的内容。
<Switch>
<Route … />
<Route exact path='/model/:link'>
<ModelStateProvider>
<Model />
</ModelStateProvider>
</Route>
…
</Switch>
如果这不满足您对路由或路由匹配的约束,或者由于某种原因您无法将所有路由器道具传递给提供者的直接子级,则可以制作一个包装提供者和模型的复合组件:
const ModelWithProvider = (props) => (
<ModelStateProvider>
<Model {...props} />
</ModelStateProvider>
);
// …
<Switch>
<Route … />
<Route exact path='/model/:link' component={ModelWithProvider} />
…
</Switch>
如果这不起作用或由于某种原因无法提前包装,你可以用 . 包装Switch
(或Router
,或任何你想要的祖先)ModelStateProvider
。您在问题中提到了这一点,但除了“效率”之外,您没有解释为什么或如何对您不起作用。当您尝试这样做时,您的应用程序是否有明显低效的地方?
推荐阅读
- hadoop - HBase:表test在meta中不存在,但有一个znode。运行 hbck 以修复不一致(失败)
- node.js - 如何使用 Nodejs 和 Express 隐藏文件的下载路径
- unity3d - 获取 Unity 指南针真北航向
- java - 使用 Spring Data 在数据库中保存大量数据
- xml - Kobo Sqlite 数据库中用于书签的 XML 格式
- node.js - Node.js 仅在重新启动后应用更改
- mysql - SQL 查询以查找具有相同电子邮件域的最大计数
- scala - 将字符串列表转换为案例对象列表
- ios - UIwebview iOS中的异步加载html字符串
- docker - 错误:服务“工作区”未能构建