Javascript 获取React路由器以导致重新渲染
我的主页上有混合内容。特定于用户的内容是其自身内容旁边的编辑按钮。 当用户通过注销路径注销时,执行以下代码:Javascript 获取React路由器以导致重新渲染,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我的主页上有混合内容。特定于用户的内容是其自身内容旁边的编辑按钮。 当用户通过注销路径注销时,执行以下代码: import React from 'react'; // needed import ReactDOM from 'react-dom'; import Home from './components/layout/Home.js'; import Login from './Login/Login'; import PollDetails from './components/
import React from 'react'; // needed
import ReactDOM from 'react-dom';
import Home from './components/layout/Home.js';
import Login from './Login/Login';
import PollDetails from './components/layout/PollDetails.js';
import EditPoll from './components/presentation/EditPoll.js';
import CreatePoll from './components/presentation/CreatePoll';
import Container from './components/containers/Container.js';
import {Route,Router,browserHistory,IndexRoute} from 'react-router';
import Auth from './utils/Auth';
const mountNode = document.getElementById('root');
ReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={Container} >
<IndexRoute component={Home} />
<Route path="login" component={Login} />
<Route path="logout" onEnter={(nextState, replace) => {
Auth.deauthenticateUser();
console.log('Logging out src/app.js');
Auth.clearCookie();
// change the current URL to /
replace('/');}} />
<Route path="Polldetailfull/:id" component={PollDetails} />
<Route path="Editthepoll/:id" component={EditPoll} />
<Route path="createPoll" getComponent={(location, callback) => {
if (Auth.isUserAuthenticated()) {
callback(null, CreatePoll);
} else {
callback(null, Home);
}
}} />
</Route>
</Router>,mountNode);
从“React”导入React;//需要
从“react dom”导入react dom;
从“./components/layout/Home.js”导入Home;
从“./Login/Login”导入登录名;
从“/components/layout/PollDetails.js”导入PollDetails;
从“/components/presentation/EditPoll.js”导入EditPoll;
从“/components/presentation/CreatePoll”导入CreatePoll;
从“./components/containers/Container.js”导入容器;
从“react Router”导入{Route,Router,browserHistory,IndexRoute};
从“/utils/Auth”导入身份验证;
const mountNode=document.getElementById('root');
ReactDOM.render(
{
Auth.deauthenticateUser();
log('Logging out src/app.js');
Auth.clearCookie();
//将当前URL更改为/
替换('/');}}}/>
{
if(Auth.isUserAuthenticated()){
回调(null,CreatePoll);
}否则{
回调(null,Home);
}
}} />
,mountNode);
但是,替换(“/”);将您发送回主页,但不重新呈现任何组件。注意,此处没有要更改的状态。我需要一个状态来强制重新渲染吗
注意,如果在浏览器上按“刷新”,则会出现所需的行为。我试着查看React路由器的代码,但找不到太多关于事件的信息。老实说,我不完全理解组件在浏览器上渲染时使用的函数 根据您的想法,您需要在特定组件的组件生命周期中使用路由基于组件的日志详细信息。下面的代码将用于路径组件生命周期(componentWillMount或componentDidMount),并根据需要路由页面
browserHistory.push('/location-path-name');
在路由器中调用基于组件的日志详细信息,如下面的示例所示
<Route path="createPoll" component={Auth.isUserAuthenticated() ? CreatePoll : Home}/>
您可以使用location.reload()
使其重新渲染您可以轻松地在代码中刷新浏览器。@JohnKennedy How?location.reload()
这是一个黑客攻击,但它是有效的!@JohnKennedy您的建议是解决方案此部分工作正常。问题出在注销路径上。这样做仍然会在地址栏中留下错误的URL。我无法理解您的观点。因此请附上该问题的屏幕截图以供参考。按建议由location.reload()
修复