使用历史对象在反应路由器中传递道具
passing props within react router with history object
import createBrowserHistory from 'history/
import appState from './AppState'
const customHistory = createBrowserHistory()
ReactDOM.render(
<Router>
<div>
<Route path="/submit" component={Submit} history={history}/>
</div>
</Router>,
document.getElementById('root')
);
注意事项:
如果我像其他属性一样添加 appState;
Submit组件中没有属性如appState,
如果我用这个;
<Route path="/submit" render={routeProps=> <Submit appState={appState}/> history={history}/>
appState 正常通过,但这次缺少历史对象,正确的做法是什么?
appState 只是 mobx class 实例。
已编辑:我找到了 "weird" 解决方案。我将路线元素更改为此;
<Route path="/submit" render={routeProps=> <Submit appState={appState}/> history={history}/>
然后我可以通过 this._reactInternalInstance._context.router.history.push('/home')
访问相同的历史对象
在进行此更改之前,我能够将其用作 this.props.history.push('/home')
如果我保留它,因为它工作正常,但以这种方式获取历史对象很烦人
我认为是对的,你最好把历史放在Router而不是Route。
看下面的回答,这个对我很管用。您仍然可以在此答案中使用 history.push
。有时 history.push
没有重定向页面。如果您遇到这种情况,您可以输入 location.href = location.href
来刷新页面。
你做错了,我敢肯定。浏览器历史记录是一个单例对象,因此您可以将其从模块中导出。看这里:
//history.js:
import createBrowserHistory from 'history/
export default createBrowserHistory();
//Submit.js
import history from "myapp/history"
export default class Submit extends React.Component {
...
}
//MyRouter.js
import Submit from './myapp/Submit'
import appState from './AppState'
ReactDOM.render(
<Router>
<div>
<Route path="/submit" component={Submit}/>
</div>
</Router>,
document.getElementById('root')
);
import createBrowserHistory from 'history/
import appState from './AppState'
const customHistory = createBrowserHistory()
ReactDOM.render(
<Router>
<div>
<Route path="/submit" component={Submit} history={history}/>
</div>
</Router>,
document.getElementById('root')
);
注意事项: 如果我像其他属性一样添加 appState; Submit组件中没有属性如appState,
如果我用这个;
<Route path="/submit" render={routeProps=> <Submit appState={appState}/> history={history}/>
appState 正常通过,但这次缺少历史对象,正确的做法是什么? appState 只是 mobx class 实例。
已编辑:我找到了 "weird" 解决方案。我将路线元素更改为此;
<Route path="/submit" render={routeProps=> <Submit appState={appState}/> history={history}/>
然后我可以通过 this._reactInternalInstance._context.router.history.push('/home')
访问相同的历史对象
在进行此更改之前,我能够将其用作 this.props.history.push('/home')
如果我保留它,因为它工作正常,但以这种方式获取历史对象很烦人
我认为是对的,你最好把历史放在Router而不是Route。
看下面的回答,这个对我很管用。您仍然可以在此答案中使用 history.push
。有时 history.push
没有重定向页面。如果您遇到这种情况,您可以输入 location.href = location.href
来刷新页面。
你做错了,我敢肯定。浏览器历史记录是一个单例对象,因此您可以将其从模块中导出。看这里:
//history.js:
import createBrowserHistory from 'history/
export default createBrowserHistory();
//Submit.js
import history from "myapp/history"
export default class Submit extends React.Component {
...
}
//MyRouter.js
import Submit from './myapp/Submit'
import appState from './AppState'
ReactDOM.render(
<Router>
<div>
<Route path="/submit" component={Submit}/>
</div>
</Router>,
document.getElementById('root')
);