reactjs - 单击 <Link> 不会在带有 require.ensure 的 React-router 中失去焦点

标签 reactjs webpack require react-router react-router-redux

当将react-router与redux-simple-router一起使用时(可能会也可能不会导致问题),只要我在每个导航项链接上都有一个require.ensure,链接就不会更改为事件状态,直到我单击链接后还单击了页面上的其他位置。

一步一步:

  1. 加载页面;一切都很好
  2. 点击<Link />并且 View 发生变化;不过,该链接尚未更新任何导航项的事件状态
  3. 单击页面上的某个位置(例如正文),事件状态现在正确地位于当前导航项上,而不是前一个导航项上

在使用 require.ensure 之前不会发生这种情况并且在我的生产服务器上没有发生 0.bundle.jsbundle.js 。它目前只发生在我的本地环境中,其中每个链接都会创建一个新的 *.bundle.js每个 View 的文件。

一些示例路线:

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 还需要添加到直接引用导航组件的组件中。

关于reactjs - 单击 <Link> 不会在带有 require.ensure 的 React-router 中失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34805612/

相关文章:

reactjs - 从 React 组件中外部加载的 HTML 访问内部函数

reactjs - react : Unexpected token return

javascript - 如何使用React Hooks重写React Native的TVEventHandler?

javascript - 如何使用 webpack + ES6 导入自定义模块?

javascript - 如何在 vanilla javascript 或基于 Node 的 javascript 项目中导入 crypto.js

ruby-on-rails - 在 Rails 控制台和 Controller 中需要一个 Ruby 模块

javascript - 只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了 setState()

webpack 在 Jest 单元测试中需要非 js 内容

javascript - 如何在EvaporateJS的cryptoMd5方法中使用nodejs crypto

php - 需要多个文件