搭建基本 Redux 框架来管理 Focused
为了更好地维护和管理后续的数据,我们需要搭建 Redux 框架来管理 focused 数据。首先,我们需要安装必要的库:
cssCopy code
npm install redux --save
然后,创建 Redux 的 store:
javascriptCopy code
import { createStore } from 'redux';
import reducer from './reducer';
const store = createStore(reducer);
export default store;
其中,reducer.js 内容如下:
arduinoCopy code
const defaultState = {};
export default (state = defaultState, action) => {
return state;
}
接下来,我们将 Redux 引入根组件,并通过 Provider 将 Redux 数据提供给组件:
javascriptCopy code
import React, { Fragment } from 'react';
import Header from './common/header';
import { Provider } from 'react-redux';
import { GlobalIconfont } from './statics/iconfont/iconfont';
import { GlobalBody } from './styles';
import store from './store';
function App() {
return (
<Provider store={store}>
<Header />
<GlobalIconfont />
<GlobalBody />
</Provider>
);
}
export default App;
对于需要使用数据的组件,我们需要使用 connect 方法:
javascriptCopy code
import { connect } from 'react-redux';
import Header from './Header';
const mapStateToProps = (state) => {
return {};
};
const mapDispatchToProps = (dispatch) => {
return {};
};
export default connect(mapStateToProps, mapDispatchToProps)(Header);
管理 Focused
对于 focused 数据,我们需要在 reducers 中进行管理:
goCopy code
const defaultState = { focused: false };
export default (state = defaultState, action) => {
if (action.type === 'search_focus') {
return { focused: true };
}
if (action.type === 'search_blur') {
return { focused: false };
}
return state;
}
然后,我们希望将仓库中的 focused 映射到组件的 Props 中:
javascriptCopy code
const mapStateToProps = (state) => {
return { focused: state.focused };
};
现在,我们需要修改 focused 数据的方法,需要经过发送 action 的流程,首先需要在映射中设置 action 的发送:
javascriptCopy code
const mapDispatchToProps = (dispatch) => {
return {
handleInputFocus() {
const action = { type: 'search_focus' };
dispatch(action);
},
handleInputBlur() {
const action = { type: 'search_blur' };
dispatch(action);
}
};
};
最后,在 reducer.js 中进行处理:
goCopy code
const defaultState = { focused: false };
export default (state = defaultState, action) => {
if (action.type === 'search_focus') {
return { focused: true };
}
if (action.type === 'search_blur') {
return { focused: false };
}
return state;
}
修改原来的方法调用即可。
加入Redux调试功能
Redux调试工具是一个非常有用的工具,它可以帮助开发者更好地理解和调试Redux应用程序中的数据流。Redux调试工具提供了一个可视化的界面,允许开发者查看Redux store中的状态、分发的action以及相应的action creator。
在Redux应用程序中,每当一个action被分发时,Redux调试工具会自动捕获并记录下这个action,同时它也会记录下相应的action creator以及当前的Redux store状态。这个过程可以帮助开发者更好地理解Redux应用程序中的数据流,以及更好地理解每个action对应的状态变化。
接下来,我们需要为Redux添加调试功能:
以下是主要步骤,可以参考文档内容进行实现:
javascriptCopy code
import { createStore, compose } from 'redux';
import reducer from "./reducer";
const composeEnhancers = (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;
const store = createStore(reducer, composeEnhancers());
export default store;
使用这个工具,我们还可以复现之前的 action 操作。