单击 <Link> 不会在 require.ensure 的 react-router 中失去焦点
Clicking <Link> doesn't lose focus in react-router with require.ensure
当将 react-router 与 redux-simple-router 一起使用时(可能会或可能不会导致问题),只要我在每个导航项 link 上都有 require.ensure,[=在单击 link.
之后,在我单击页面上的其他位置之前,41=] 不会更改为活动状态
一步一步:
- 加载页面;一切都很好
- 单击
<Link />
视图发生变化;不过,link 尚未更新任何导航项的活动状态
- 点击页面上的某处,比如正文,活动状态现在正确地显示在当前导航项上,并关闭前一个导航项
这在使用 require.ensure
之前没有发生,在我的生产服务器上也没有发生,那里有 0.bundle.js
和 bundle.js
。它目前只发生在我的本地环境中,每个 link 为每个视图创建一个新的 *.bundle.js
文件。
一些示例路线:
module.exports =
component: 'div'
childRoutes: [
path: '/'
onEnter: (nextState, replaceState) =>
if nextState.location.pathname == '/'
replaceState null, '/game'
component: Master
childRoutes: [
path: 'game'
getComponent: (location, cb) =>
require.ensure [], (require) =>
cb null, require './views/game'
,
path: 'video-policy'
getComponent: (location, cb) =>
require.ensure [], (require) =>
cb null, require './views/video-policy'
,
path: '*'
getComponent: (location, cb) =>
require.ensure [], (require) =>
cb null, require './views/404'
]
]
还有我的路由器:
render() { return (
<Provider store={store}>
<Router history={history} routes={routes} />
</Provider>
)}
在我的导航中,我有这个:
export default connect(
state => ({ state: state })
)(HeaderNav);
在connect
中使用pure: false
——否则来自路由器的上下文更新将被忽略。
这是一个例子:
export default connect(
state => ({ state: state }),
null, null,
{ pure: false }
)(HeaderNav);
pure: false
也需要添加到直接引用导航组件的组件中。
当将 react-router 与 redux-simple-router 一起使用时(可能会或可能不会导致问题),只要我在每个导航项 link 上都有 require.ensure,[=在单击 link.
之后,在我单击页面上的其他位置之前,41=] 不会更改为活动状态一步一步:
- 加载页面;一切都很好
- 单击
<Link />
视图发生变化;不过,link 尚未更新任何导航项的活动状态 - 点击页面上的某处,比如正文,活动状态现在正确地显示在当前导航项上,并关闭前一个导航项
这在使用 require.ensure
之前没有发生,在我的生产服务器上也没有发生,那里有 0.bundle.js
和 bundle.js
。它目前只发生在我的本地环境中,每个 link 为每个视图创建一个新的 *.bundle.js
文件。
一些示例路线:
module.exports =
component: 'div'
childRoutes: [
path: '/'
onEnter: (nextState, replaceState) =>
if nextState.location.pathname == '/'
replaceState null, '/game'
component: Master
childRoutes: [
path: 'game'
getComponent: (location, cb) =>
require.ensure [], (require) =>
cb null, require './views/game'
,
path: 'video-policy'
getComponent: (location, cb) =>
require.ensure [], (require) =>
cb null, require './views/video-policy'
,
path: '*'
getComponent: (location, cb) =>
require.ensure [], (require) =>
cb null, require './views/404'
]
]
还有我的路由器:
render() { return (
<Provider store={store}>
<Router history={history} routes={routes} />
</Provider>
)}
在我的导航中,我有这个:
export default connect(
state => ({ state: state })
)(HeaderNav);
在connect
中使用pure: false
——否则来自路由器的上下文更新将被忽略。
这是一个例子:
export default connect(
state => ({ state: state }),
null, null,
{ pure: false }
)(HeaderNav);
pure: false
也需要添加到直接引用导航组件的组件中。