【发布时间】:2018-01-19 10:49:10
【问题描述】:
我从 react-starter-kit 项目创建了一个新路由,它异步获取一些数据,然后渲染它,但一秒钟后页面重新加载并显示一条消息“页面未找到 - 抱歉,但页面您尝试查看的内容不存在”。
在控制台中我看到 - “警告:文本内容不匹配。服务器:“余额”客户端:“找不到页面”
async function action() {
let bittrex = new ccxt.bittrex ({
'apiKey': '',
'secret': ''
})
try {
// fetch account balance from the exchange
let bittrexBalance = await bittrex.fetchBalance ()
/**** commenting above and uncommenting this block stops it from happening....
let bittrexBalance = {};
bittrexBalance.info= [];
let currency = {};
currency.Currency = "BTC";
currency.Value=999;
// output the result
bittrexBalance.info.push(currency);*/
console.log ('balance', bittrexBalance)
let balances = [];
balances.push(bittrexBalance)
return {
title: "Balances",
component: (
<Layout>
<Balances balances={balances} />
</Layout>
),
};
} catch (e) {
console.log('SOME sort of error', e);
}
有人知道这可能是什么吗?
编辑添加,我现在意识到,如果我禁用 Javascript,一切都会完美运行......
这是迄今为止我发现的唯一线索...我不明白为什么它会在页面加载后重新加载...
页面未找到错误来自它正在经历:
catch (e) 第二次...我怀疑 ccxt 库中发生了一些事情,但问题实际上是因为页面以某种方式重新加载了它被第二次调用...
【问题讨论】:
-
嗨,你的 sn-p 并没有告诉我太多。如果您的服务器端渲染 (SSR) 代码路径无法获取、加载、知道相同的数据,但您的客户端可以,则会发生此错误——当您点击刷新时,F5,着陆从其他网站或类似网站。 你的服务器知道所有数据吗?
-
@langpavel 是的,我正在点击 f5,页面从上面的服务器端代码正确加载。然后它以某种方式刷新,我得到“页面未找到错误”,如果我禁用 Javascript,则不会发生这种情况
-
那么你已经解决了一半的问题。您的客户端无法获得与服务器相同的数据,然后在客户端代码挂载后,客户端重新执行路由器和客户端上的路由器决定呈现不同的东西。您的服务器和客户端数据获取代码之间的成本很低。