【发布时间】:2020-10-29 18:47:54
【问题描述】:
我在 react 中创建了一个计算器。现在我想使用全局而不是本地状态——我知道这个解决方案可能没有更大的会话,但我想用这种方式学习 redux。我准备了动作和减速器。我不知道如何传递这些值 - 我收到一个错误,结果变量不存在。
本地状态申请链接:
https://codesandbox.io/s/calculator-9dq6i?file=/src/Calc.js:691-705
使用 redux 链接到应用程序:
https://codesandbox.io/s/gifted-shirley-uonew?file=/src/reducers/index.js:0-292
代码:
index.js
import React from "react";
import { render } from "react-dom";
import { createStore } from "redux";
import { Provider } from "react-redux";
import App from "./components/App";
import calculate from "./reducers";
const store = createStore(calculate);
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById("root")
);
reducer - index.js
const calculate = (state, action) => {
switch (action.type) {
case "ADD_TO_MEMORY":
result += id;
return result;
case "ADD":
result = parseFloat(result) + parseFloat(prev);
return result;
default:
return result;
}
};
export default calculate;
动作 - index.js
let prev = "";
let result = "";
let current = "";
let disabled = true;
export const addToMemory = id => ({
type: "ADD_TO_MEMORY",
result: result
});
export const add = result => ({
type: "ADD",
result: result
});
App.js
import React from "react";
import Counter from "./Counter";
const App = () => (
<div>
<Counter />
</div>
);
export default App;
Counter.js
import React from "react";
import { connect } from "react-redux";
import { addToMemory, add } from "../actions/index";
const Counter = ({ dispatch, result }) => {
return (
<p>
<button id="1" onClick={addToMemory("1")}>
1
</button>
<button id="1" onClick={addToMemory("2")}>
2
</button>
<button id="1" onClick={addToMemory("3")}>
3
</button>
<button id="1" onClick={addToMemory("4")}>
4
</button>
<button id="1" onClick={addToMemory("5")}>
5
</button>
<button id="1" onClick={addToMemory("6")}>
6
</button>
<button id="1" onClick={addToMemory("7")}>
7
</button>
<button id="1" onClick={addToMemory("8")}>
8
</button>
<button id="1" onClick={addToMemory("9")}>
9
</button>
<button id="1" onClick={addToMemory("0")}>
0
</button>
<p>RESULT: {result}</p>
</p>
);
};
export default connect()(Counter);
【问题讨论】: