【发布时间】:2020-09-11 20:06:30
【问题描述】:
我做了一个如下所示的快速测试:
<Router>
<Switch>
<Route path="/foo" render={ () => <TestComponent key="test" data="1" /> } />
<Route path="/bar" render={ () => <TestComponent key="test" data="2" /> } />
</switch
</Router>
TestComponent 看起来像这样:
const TestComponent = withRouter(({ history, data }) => {
const [ value, setValue ] = useState(null);
const loading = !value;
useEffect(() => {
setTimeout(() => {
setValue(data);
history.push('/bar');
}, 1000 );
}, [ data ]);
console.log("**VAL", data, value);
return <div>
{ data } / { loading ? "LOADING" : value }
</div>;
});
所以,当我点击路由 /foo 时,组件会加载,稍等片刻,然后使用相同的组件(尽管是不同的实例)重定向到另一条路由。
调试显示
**VAL 1 null
**VAL 1 1
**VAL 2 null // <-- expected : VAL 2 1
**VAL 2 2
**VAL 2 2
我希望 React 看到两者是相同的组件,而不是创建不同的实例。如何让同一个组件响应两条不同的路由?
【问题讨论】:
标签: reactjs react-router