javascript - 商店状态更改后反应应用程序不重新呈现
问题描述
商店更改后,我的组件不会重新渲染。我通过使用 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;
}
应用程序.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(减速器)
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
组件中,您第二次初始化存储。并绑定到这第二家商店
const store = configureStore();
const handleName = () => {
store.dispatch(changeName())
}
同时与connect()
您访问声明的存储App.jsx
从第一个读取但第二个更新。只需删除第二个store
并使用mapDispatchToProps
(传递给的第二个参数connect()
)代替:
const mapStateToProps = (state) => ({
home: state.home
});
export default connect(mapStateToProps, { handleName: changeName })(Home);
推荐阅读
- php - 验证码不接受 Yii
- c# - Google Forms 上的 Webclient C# 从服务器返回 (405) Method Not Allowed
- java - 将 Excel 中的每个单元格数据转换为 XML 以存储到 DB
- java - 在java中动态设置类实例变量
- javascript - 使用 https.request 在 nodejs 中发送表单数据
- svn - 使用 SmartSVN 从 subversion 自动更新
- android - 需要 Android MVVM 示例架构项目
- php - MAILER ERROR: 无法实例化邮件功能,PHP 邮件程序
- android - Android 应用程序在某些设备上正常运行,某些设备应用程序崩溃
- android - 如何在Android中实现多按钮点击事件