javascript - 商店状态更改后,React 应用程序不会重新渲染

标签 javascript reactjs redux

商店更改后我的组件不会重新渲染。 我通过将他放到控制台来确保商店实际上正在改变 store.subscribe() 和 console.log(store.getState()) 但组件仍然没有再次重新渲染。 我将感谢您的帮助。

configureStore.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

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 )

const homeDefaultState = {
    name: 'someName'
}

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

home.js(操作)

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

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);

最佳答案

在您的 Home 组件中,您第二次初始化存储。并将操作绑定(bind)到第二个商店

const store = configureStore();

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

同时使用connect(),您可以访问App.jsx中声明的存储

从第一个读取但更新第二个。只需删除第二个 store 并使用 mapDispatchToProps( second parameter passedconnect()) 即可:

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

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

关于javascript - 商店状态更改后,React 应用程序不会重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183897/

相关文章:

javascript - Redux-Form matchDispatchToProps 不工作

redux-可观察的离线/乐观行为

javascript - mapDispatchToProps 中的链接粗箭头让我出错

javascript - node.js mongodb .. (不可变)字段 '_id' 被发现已被更改

javascript - Protractor 页面对象问题

javascript - 在渲染方法中 react 组织链接

node.js - 该请求已被阻止;从 S3 向 EC2 Node 端点发出请求时,内容必须通过 HTTPS 提供错误

javascript - 从 JSON GraphQL 获取数据错误 : TypeError: Cannot read property 'map' of null

javascript - 在第一个动画之后调用它后,div 上的动画不起作用?

javascript - useState 不会在数组状态上使用 push、unshift 和 pop 重新渲染