实战Header组件:搭建Redux数据管理框架

208 阅读2分钟

搭建基本 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 操作。