Redux 是一个用于 JavaScript 应用的状态管理库,它常与 React 一起使用,但也可以与其他框架或库结合使用。Redux 的核心概念是将应用的状态存储在一个对象树中,并通过派发(dispatch)动作(actions)来改变这个状态。
动作(Actions):是描述发生了什么的对象。它们是纯 JavaScript 对象,必须有一个 type
字段来指示正在执行的更改类型。
缩减器(Reducers):是纯函数,接收当前状态和一个动作,然后返回新的状态。它们根据动作的类型来决定如何更新状态。
调度器(Dispatchers):是 Redux store 提供的一个方法,用于发送动作到 store,这些动作随后被传递给所有的缩减器进行处理。
Store:是 Redux 中的核心容器,它保存了应用的所有状态,并提供了方法来访问状态、派发动作和监听状态变化。
在 Redux 中,通常有两种方式来触发状态更新:
store.dispatch(action)
,可以将动作发送到 store,然后由 store 分发给所有的缩减器进行处理。如果你在 Redux 中遇到了问题,比如状态没有更新,可能的原因包括:
store.dispatch(action)
来派发动作。connect
函数或者 hooks(如 useSelector
和 useDispatch
)正确地将组件连接到 Redux store。// actions.js
export const ADD_TODO = 'ADD_TODO';
export function addTodo(text) {
return { type: ADD_TODO, text };
}
// reducers.js
import { ADD_TODO } from './actions';
function todos(state = [], action) {
switch (action.type) {
case ADD_TODO:
return [...state, { text: action.text, completed: false }];
default:
return state;
}
}
export default todos;
// store.js
import { createStore } from 'redux';
import rootReducer from './reducers';
const store = createStore(rootReducer);
export default store;
// App.js
import React from 'react';
import { connect } from 'react-redux';
import { addTodo } from './actions';
class App extends React.Component {
handleAddTodo = () => {
this.props.addTodo('New Todo');
};
render() {
return (
<div>
<button onClick={this.handleAddTodo}>Add Todo</button>
<ul>
{this.props.todos.map((todo, index) => (
<li key={index}>{todo.text}</li>
))}
</ul>
</div>
);
}
}
const mapStateToProps = state => ({
todos: state.todos,
});
const mapDispatchToProps = {
addTodo,
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
在这个示例中,我们定义了一个 addTodo
动作和一个处理该动作的缩减器。然后在组件中通过 dispatch
方法派发这个动作,从而更新 Redux store 中的状态。
领取专属 10元无门槛券
手把手带您无忧上云