【发布时间】:2020-09-15 07:36:33
【问题描述】:
我正在构建一个 Reactjs 应用程序。我不明白为什么这样做是错误的并导致我出现此错误:
Error: Invariant failed: You should not use <Redirect> outside a <Router>
代码如下:
index.js 中的一个简单路由器
ReactDOM.render(
<Router>
<Switch>
<Route exact path="/" component={(props) => <AppContainer><HomePage {...props}/></AppContainer>}/>
<Route exact path="/register" component={(props) => <AppContainer><RegisterPage1 {...props}/></AppContainer>}/>
</Switch>
</Router>, document.getElementById('root')
);
AppContainer 只是一个带有 id 的简单 div:
export default function AppContainer({children}) {
return (
<div id="appContainer">{children}</div>
);
}
在 RegisterPage1 内部,经过一些处理后,我在“appContainer”上触发了渲染。这应该会在路由器内部渲染一个新组件。
ReactDOM.render(<RegisterPage2 data={res}/>, document.getElementById('appContainer'));
在 RegisterPage2 中,我正在使用,但出现上述错误。
if (redirectHome) return (<Redirect to={"/"}/>)
else {
return (
//RegisterPage2Components
)
}
由于我在路由器内部进行渲染,我不明白为什么我可以在 RegisterPage1 中使用 Redirect 而在 RegisterPage2 中不能。我检查了RegisterPage2,路由器仍然在这里(通过在路由器和交换机之间添加一些随机文本)。 如果这样渲染是错误的,不添加新路由的正确方法是什么?
代码沙盒: https://codesandbox.io/s/autumn-leftpad-7s5sy?file=/src/index.js
【问题讨论】:
-
为什么
RegisterPage2是由 ReactDom 而不是 React 应用程序呈现的?在我看来,如果RegisterPage2被导入其他地方并“注入”到 some DOMNode 中,那么你可能有多个 React 实例运行你的应用程序,而这也恰好是一个正在运行的反应应用程序。你能用这个问题生成一个running代码框吗?
标签: javascript reactjs react-router