Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 重置找到的中继路由器中的环境_Reactjs_Relayjs_Relay - Fatal编程技术网

Reactjs 重置找到的中继路由器中的环境

Reactjs 重置找到的中继路由器中的环境,reactjs,relayjs,relay,Reactjs,Relayjs,Relay,我正在使用React继电器并找到了。当用户注销时,作为安全措施,应正确刷新中继存储 显然,建议的步骤是实现可重置对象 这是我的可复位继电器(按照的建议): 这是我的index.js: index.js import currentRelay from "./ResettableRelay"; import Routes from "./Routes"; const Router = createFarceRouter({ historyProtocol: new BrowserProt

我正在使用React继电器并找到了。当用户注销时,作为安全措施,应正确刷新中继存储

显然,建议的步骤是实现可重置对象

这是我的可复位继电器(按照的建议):

这是我的index.js:

index.js
import currentRelay from "./ResettableRelay";
import Routes from "./Routes";

const Router = createFarceRouter({
    historyProtocol: new BrowserProtocol(),
    historyMiddlewares: [queryMiddleware],
    routeConfig: Routes,
    render: createRender({})
});
const mountNode = document.getElementById("root");

ReactDOM.render(
    <Router
        resolver={currentRelay.resolver}
    />, mountNode);
我仍然无法使上述方法起作用。注销时,即使已重置environment属性,解析程序道具也不会更新其环境。此外,{viewer}中继查询在登录或注销时不会更新。它只在随后的查询中更新。

我发现在
找到的中继
的repo中显示了一个可重新安装的路由器

我在这里复制该测试的组件主题,以供将来参考:

类ResettableRouter扩展React.Component{
构造函数(道具、上下文){
超级(道具、背景);
此.state={
解析程序:this.createResolver(),
};
}
重置(){
这是我的国家({
解析程序:this.createResolver(),
});
}
createResolver(){
返回新的InstrumentedResolver(createEnvironment(fetchSpy));
}
render(){
返回;
}
}
想法是将
路由器
包装到另一个组件中,以便使用新的解析器使用
this.setState(…)
触发重新渲染

如果您使用的是已连接的路由,我认为您应该能够将新环境/解析程序作为道具传递。

我发现在
发现中继的repo中显示了一个可重新连接的路由器

我在这里复制该测试的组件主题,以供将来参考:

类ResettableRouter扩展React.Component{
构造函数(道具、上下文){
超级(道具、背景);
此.state={
解析程序:this.createResolver(),
};
}
重置(){
这是我的国家({
解析程序:this.createResolver(),
});
}
createResolver(){
返回新的InstrumentedResolver(createEnvironment(fetchSpy));
}
render(){
返回;
}
}
想法是将
路由器
包装到另一个组件中,以便使用新的解析器使用
this.setState(…)
触发重新渲染


如果您使用的是连接的路由,我认为您应该能够将新环境/解析器作为道具传递。

我也有同样的问题。。。我刚刚在Discord的中继频道上点击了@taion来帮助我们我也有同样的担心。。。我刚刚在Discord的中继频道上点击了@taion来帮助我们
index.js
import currentRelay from "./ResettableRelay";
import Routes from "./Routes";

const Router = createFarceRouter({
    historyProtocol: new BrowserProtocol(),
    historyMiddlewares: [queryMiddleware],
    routeConfig: Routes,
    render: createRender({})
});
const mountNode = document.getElementById("root");

ReactDOM.render(
    <Router
        resolver={currentRelay.resolver}
    />, mountNode);
onLogout = () {
    clearLoginToken();
    console.log(currentRelay.environment);
    currentRelay.reset();
    console.log(currentRelay.environment); //These two logged relay environments are different!
    this.forceUpdate(); //Not sure if I need this
}