2

我已经尝试设置 React、redux、react-redux、react-router 和 react-redux-router,但是每次我从一个路由转换到另一个路由时,整个应用程序都会重新渲染,我该如何解决这个问题? 我的意思是,我需要做的至少是顶级组件留在他所在的位置并且不会丢失 redux 状态树,因为路由器转换会重置 redux 状态。

这些是我正在使用的软件包的版本:

“react”:“^0.14.6”,
“react-dom”:“^0.14.6”,
“react-redux”:“^4.0.6”,
“react-router”:“^2.0.0-rc5 ",
"react-router-redux": "^3.0.0",
"redux": "^3.0.6"

这是我的路线配置:

export default (<Route path="/" component={App}>
    <Route path="companies">
        <Route path="create" components={CompaniesCreate}></Route>
        <Route path="grid" components={CompaniesGrid}></Route>
    </Route>
 </Route>);

我的默认 index.js 导出:

ReactDOM.render(
<Provider store={store}>
    <div>
        <Router history={browserHistory} routes={Routes}/>
        <DevTools />
    </div>
</Provider>
, document.querySelector('.container'));

我的 ConfigureStore.js

const reduxRouterMiddleware = syncHistory(browserHistory);
const finalCreateStore = compose(
    applyMiddleware(ReduxPromise, reduxRouterMiddleware),
    DevTools.instrument()
)(createStore);

export default function configureStore(initialState) {
    const store = finalCreateStore(rootReducer, initialState);
    if (module.hot) {
        module.hot.accept('../reducers', () =>
            store.replaceReducer(require('../reducers'))
        );
    }
    return store;
 }

最后,reducers 的索引:

export default combineReducers({
    ...reducers
    routing: routeReducer,
});
4

1 回答 1

5

由于ListItem渲染了EnhancedButton一个名为 containerElement 的参数,因此您可以使用 ReactRouterLink组件调用它。在他们的 Link 文档中,他们指定了如何使用它,下面是一个示例,您必须获取 react-router 的 Link 组件并将其用于在您的应用程序中导航。

import {Link} from 'react-router';

render() {
//removed props and other items for simplicity
    return(    
        <ListItem 
             containerElement=Link 
             key={1} 
             primaryText="Crear" 
             linkButton={true} 
             href="/companies/create" 
             leftIcon={<CreateIcon />} 
         />
     );
} 
于 2016-02-18T14:09:43.943 回答