【发布时间】:2021-08-21 21:57:26
【问题描述】:
我创建了减速器并使用它来更改我的商店的状态。但正如您在 App.js 中看到的那样,每当我单击按钮并更新状态时。它更新。我可以在控制台中看到它。但组件不更新。如您所见,我有没有更新的曲目列表。如果我因为组件重新渲染而对代码进行任何更改,我可以看到之后的新状态。为什么状态更新时不自动渲染。
动作
import * as actions from './actionTypes'
export const trackAdded = (title, artist, audioSrc, img) => {
return {
type: actions.TRACK_ADDED,
payload: {
title,
artist,
audioSrc,
img
}
}
}
减速器
import * as actions from './actionTypes'
export default function reducer(state = [], action) {
switch (action.type) {
case actions.TRACK_ADDED:
return [
...state,
{
title: action.payload.title,
artist: action.payload.artist,
audioSrc: action.payload.audioSrc,
img: action.payload.img
}
]
default:
return state
}
}
App.js
import './App.css';
import store from './store'
import { trackAdded } from './actions'
function App() {
const add = (title) => {
store.dispatch(trackAdded(title, "Taylor Swift", "src", "image"))
console.log(store.getState())
}
return (
<div className="App">
{store.getState().map((track, track_id) => {
return (
<li key={track_id}>{track.title}</li>
)
})}
<button onClick={() => { add("Shake It Off") }}>Add Track</button>
</div>
);
}
export default App;
【问题讨论】:
-
尝试使用 react-redux,它有助于通过优化的钩子从组件中读取和更新存储。
-
你应该使用react-redux,将你的应用包装在provider中,在你的组件中使用useSelector and useDispatch钩子。
标签: javascript reactjs redux ecmascript-6