我正在尝试构建一个简单的React应用程序,它使用Redux进行状态管理。我能够创建一个存储和调度操作,但无法弄清楚为什么输入的显示值没有更新。
这里是sandbox
我有一个单独的 * reducer.js * 和 * App.js *。都在下面。
// This is App.js file
import "./styles.css";
import { createStore } from "redux";
import myReducer from "./reducers/reducer.js";
const store = createStore(myReducer);
store.subscribe(() => {
console.log("current state", store.getState());
});
export default function App() {
function updateFName(event) {
let action = { type: "UPDATE_FIRST_NAME", payload: event.target.value };
store.dispatch(action);
}
function updateLName(event) {
let action = { type: "UPDATE_LAST_NAME", payload: event.target.value };
store.dispatch(action);
}
return (
<div className="App">
<h1>
Hello {store.getState().fName} {store.getState().lName}
</h1>
<input
value={store.getState().fName}
onChange={updateFName}
placeholder={"Fisrt Name"}
/>
<input
value={store.getState().lName}
onChange={updateLName}
placeholder={"Last Name"}
/>
</div>
);
}
// This is reducer.js file
const initialState = {
fName: "",
lName: ""
};
function myReducer(state = initialState, action) {
switch (action.type) {
case "UPDATE_FIRST_NAME":
return { ...state, fName: state.fName + action.payload };
case "UPDATE_LAST_NAME":
return { ...state, lName: state.lName + action.payload };
default:
return state;
}
}
export default myReducer;
当我在输入字段中键入内容时(图中的红色圆圈),我确实会在控制台中登录更新的存储状态(图中的绿色圆圈)。**但显示的值不会更改。**如何更改
我试着阅读其他答案,但还是想不出来。请帮帮忙。
2条答案
按热度按时间bnl4lu3b1#
问题是你当前的组件没有被重新渲染。当组件的“状态”或“属性”改变时,你的组件会被重新渲染。
在redux应用程序中,我们通常用
然后使用
useSelecter
钩子,我们访问状态,如果检测到任何更改,useSelector
将重新渲染应用程序,以便我们的组件从商店获取最新数据。由于您只想查看redux的基本功能,我将向您展示如何使您的组件重新渲染,以便您看到问题。在App.js
中在
onChange
处理程序中,您正在更新redux存储,但在本例中,我们还将更新本地状态由于
setFirstName
将更新useState
值,因此组件将重新呈现,您将看到存储中更新的值。izkcnapc2#
我认为这里的一般最佳实践是对输入
value
s使用本地状态,然后使用按钮中的onClick
处理程序将更新提交到redux状态存储。这样,您可以在数据添加到状态存储之前进行任何需要的验证。大致如下: