React Route 内容触发两次
React Route content triggers twice
为什么此警报会触发两次?
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { BrowserRouter as Router, Route} from 'react-router-dom'
ReactDOM.render(
<Router>
<Route path="" render={props => {
fetch('some_path').then(response => response.json)
.then(data => {
alert("i show up twice!");
return <p>something</p>
});
</Router>
, document.getElementById('root'));
我想解析查询字符串,然后相应地传递数据,我注意到代码是 运行 两次。我用一个简单的警报来举例说明。
编辑:我挖得更深一点,显然问题不是因为我什么都不 return 而是因为我拿了一些东西。我更新了示例。
那是因为您没有将任何内容返回给 Route 组件进行渲染。
试试这个:
ReactDOM.render(
<Router>
<Route
path=""
render={props => {
fetch("some_path")
.then(response => response.json)
.then(data => {
alert("i show up twice!");
return <p>something</p>;
});
return <p>something</p>;
}}
/>
</Router>,
document.getElementById("root")
);
虽然@Massimiliano 暗示了一个回应,但我 post 这个单独的答案是因为我觉得这个答案不完整。
在我在原始问题中提供的代码片段中,问题是我试图在呈现组件之前获取数据(我正在考虑将获取的数据作为参数传递给组件)。
正确的做法是渲染组件,然后从 React 组件的生命周期中使用 componentDidMount()
。我在那里解析了查询字符串,获取数据并更新了状态(使用 this.setState()
)。
正如 docs 所说,调用 componentDidMount()
将触发重新呈现,但它发生在浏览器首先呈现页面之前。因此,即使在幕后,用户也不会将其视为双重渲染。
我没有设法找出我无法在 <Route>
中获取数据的确切原因,但我上面描述的流程是我需要的正确方法。
为什么此警报会触发两次?
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { BrowserRouter as Router, Route} from 'react-router-dom'
ReactDOM.render(
<Router>
<Route path="" render={props => {
fetch('some_path').then(response => response.json)
.then(data => {
alert("i show up twice!");
return <p>something</p>
});
</Router>
, document.getElementById('root'));
我想解析查询字符串,然后相应地传递数据,我注意到代码是 运行 两次。我用一个简单的警报来举例说明。
编辑:我挖得更深一点,显然问题不是因为我什么都不 return 而是因为我拿了一些东西。我更新了示例。
那是因为您没有将任何内容返回给 Route 组件进行渲染。 试试这个:
ReactDOM.render(
<Router>
<Route
path=""
render={props => {
fetch("some_path")
.then(response => response.json)
.then(data => {
alert("i show up twice!");
return <p>something</p>;
});
return <p>something</p>;
}}
/>
</Router>,
document.getElementById("root")
);
虽然@Massimiliano 暗示了一个回应,但我 post 这个单独的答案是因为我觉得这个答案不完整。
在我在原始问题中提供的代码片段中,问题是我试图在呈现组件之前获取数据(我正在考虑将获取的数据作为参数传递给组件)。
正确的做法是渲染组件,然后从 React 组件的生命周期中使用 componentDidMount()
。我在那里解析了查询字符串,获取数据并更新了状态(使用 this.setState()
)。
正如 docs 所说,调用 componentDidMount()
将触发重新呈现,但它发生在浏览器首先呈现页面之前。因此,即使在幕后,用户也不会将其视为双重渲染。
我没有设法找出我无法在 <Route>
中获取数据的确切原因,但我上面描述的流程是我需要的正确方法。