简体   繁体   English

存储状态更改后,React 应用程序不会重新呈现

[英]React app not rerender after store state changed

My component is not rerendering after the store is changing.商店更改后,我的组件不会重新渲染。 I make sure that the store is actually changing by dropping him to the console with store.subscribe() and console.log(store.getState()) but still the component is not rerendering again.我通过使用 store.subscribe() 和 console.log(store.getState()) 将他放到控制台来确保商店实际上正在改变,但组件仍然没有再次重新渲染。 I will appreciate your help.我会感谢你的帮助。

configureStore.js配置Store.js

import { createStore, combineReducers } from 'redux';
import home from '../reducers/home';
import favorites from '../reducers/favorites';

export default () => {
    const store = createStore(combineReducers({
        home,
        favorites
    }))

    return store;
}

App.js应用程序.js

import React from 'react';
import ReactDOM from 'react-dom';

import { Provider } from 'react-redux';
import configureStore from './redux/store/configureStore';
import AppRouter from './router/AppRouter';

const store = configureStore();

const jsx = (
    <Provider store={store}>
        <AppRouter />
    </Provider>
);

ReactDOM.render(jsx, document.querySelector('#root'));

home.js (reducer) home.js(减速器)

const homeDefaultState = {
    name: 'someName'
}

export default (state = homeDefaultState, action) => {
    switch (action.type) {
        case 'CHANGE_NAME':
            return {
                ...state,
                name: 'otherName'
            }
        default:
            return state;
    }
}

home.js (action) home.js(动作)

export const changeName = () => ({
    type: 'CHANGE_NAME'
})

Home.js (component) Home.js(组件)

import React from 'react';

import configureStore from '../../redux/store/configureStore';
import { changeName } from '../../redux/actions/home';
import { connect } from 'react-redux';

const store = configureStore();

const handleName = () => {
    store.dispatch(changeName())
}

const Home = (props) => (
    <div className="home">
        <button onClick={handleName}>
            change name
        </button>

        {props.home.name}
    </div>
);

const mapStateToProps = (state) => ({
    home: state.home
});

export default connect(mapStateToProps)(Home);

In your Home component you initialize store for second time.在您的Home组件中,您第二次初始化 store。 And bound action to this second store并将行动绑定到这家第二家商店

const store = configureStore();

const handleName = () => {
    store.dispatch(changeName())
}

At the same time with connect() you access store declared in App.jsx同时使用connect()访问App.jsx声明的App.jsx

Read from first but update second.从第一个读取但第二个更新。 Just remove second store and use mapDispatchToProps ( second parameter passed to connect() ) instead:只需删除第二个store并使用mapDispatchToProps传递connect() 第二个参数):

const mapStateToProps = (state) => ({
    home: state.home
});

export default connect(mapStateToProps, { handleName: changeName })(Home);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM