第一個小反應/ redux項目,學習反應和redux。React/Redux - 調度不更新視圖
按鈕元素上的onClick事件觸發,因爲我可以看到控制檯中的值(在reducer文件中)。但是,該視圖不會更新。
是的,我看了網上,我一直在這個問題上停留了一整天。
我在做什麼錯?
在此先感謝。
PanelContainer.js文件:
class PanelContainer extends React.Component {
constructor(){
super();
this.state = {
color: new Color()
}
}
render(){
return (
<div class="container">
<Row>
<Cell cols={`col-sm-12 col-md-3 col-lg-3`}>
<Panel>
<PanelBody color={this.state.color.generateColor(new Gray())}>
<Title title={this.props.follower.count} />
<p>{this.props.follower.description}</p>
<p><button class="btn btn-primary" onClick={() => this.props.getFollower()}>Update</button></p>
</PanelBody>
</Panel>
</Cell>
</Row>
</div>
);
}
}
const mapStateToProps = (state) => {
return {
follower: state.followerReducer
};
};
const mapDispatchToProps = (dispatch) => {
return {
getFollower:() => {
dispatch(getFollower());
},
changeFollower:() => {
dispatch(changeFollower());
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(PanelContainer);
FolloweReducer.js文件:
export default (state = { follower: { count: 0, description: "Default description" } }, action) => {
switch(action.type){
case "GET_FOLLOWER":
state = { ...state, follower: action.payload };
console.log("GET FOLLOWER", state);
break;
case "CHANGE_FOLLOWER":
state = { ...state, follower: action.payload };
console.log("CHANGE FOLLOWER", state);
break;
default:
break;
}
return state;
};
FollowerAction.js文件:
export function getFollower() {
return {
type: "GET_FOLLOWER",
payload: {
count: 20,
description: "New followers added this month"
}
}
}
export function changeFollower(){
return {
type: "CHANGE_FOLLOWER",
payload: {
count: 50,
description: "Changed Followers!!!"
}
}
}
Store.js文件:
const store = createStore(combineReducers({
followerReducer: followerReducer
}));
export default store;
個
App.js文件:
import React from "react";
import ReactDom from "react-dom";
import {Provider} from "react-redux";
import PanelContainer from "./panel/PanelContainer";
import store from "./shared/Store";
let app = document.getElementById("app");
ReactDom.render(
<Provider store={store}>
<PanelContainer />
</Provider>,
app
);
它在redux文檔中明確指出不要改變狀態。http://redux.js.org/docs/Troubleshooting.html#never-mutate-reducer-arguments – azium
@azium wait ...我如何變異狀態?我在做state = {... state,follower:// code} ...就我所知,這不是變異狀態。 – FNMT8L9IN82
您應該提供更多代碼 - 您是否正確初始化提供程序? – Adidi