React Native 结合 Redux 教程

React Native 是一个强大的跨平台移动应用开发框架,而 Redux 是一个流行的状态管理库。结合 React Native 和 Redux 可以帮助开发人员更好地组织和管理应用程序的状态,提高代码的可读性和可维护性。本文将介绍如何在 React Native 应用程序中结合 Redux 编写高质量的代码。

Redux 简介

Redux 是一个 JavaScript 状态容器,提供了一个可预测的状态管理系统。它把所有应用程序数据存储在一个单一的 store 中,每个组件可以从这个 store 中获取所需的状态。每个组件可以发起一个 action 来更新应用程序状态,这个 action 会被处理器处理,并可以发出一个新的 state。这个新的 state 将被存储在 store 中,并且可以在所有组件中进行访问。

React Native 和 Redux 结合使用

在 React Native 中,我们可以安装 redux、react-redux 以及 redux-thunk 这三个依赖项。

npm install redux react-redux redux-thunk --save

创建 Redux Store

Redux 应用程序有一个单一的 store,它存储应用程序的状态。

import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import rootReducer from './reducers';

const configureStore = (initialState) => {
  const middleware = [thunkMiddleware];
  const store = createStore(
    rootReducer,
    initialState,
    applyMiddleware(...middleware)
  );

  return store;
};

export default configureStore;

创建 Reducer

Reducer 是应用程序状态的处理器,它处理各种 actions,并根据 actions 更新 store 中的应用程序状态。

const initialState = {
  isLoading: false,
  isError: false,
  data: []
};

const dataReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'FETCH_DATA_REQUEST':
      return {
        ...state,
        isLoading: true,
        isError: false
      };
    case 'FETCH_DATA_SUCCESS':
      return {
        ...state,
        isLoading: false,
        isError: false,
        data: action.payload
      };
    case 'FETCH_DATA_FAILURE':
      return {
        ...state,
        isLoading: false,
        isError: true
      };
    default:
      return state;
  }
};

export default dataReducer;

创建 Action

Action 是一个简单的 JavaScript 对象,它提供了更新应用程序状态的方法。Action 拥有一个类型和一个可选的负载。

export const fetchDataRequest = () => {
  return {
    type: 'FETCH_DATA_REQUEST'
  };
};

export const fetchDataSuccess = (data) => {
  return {
    type: 'FETCH_DATA_SUCCESS',
    payload: data
  };
};

export const fetchDataFailure = () => {
  return {
    type: 'FETCH_DATA_FAILURE'
  };
};

export const fetchData = () => {
  return (dispatch) => {
    dispatch(fetchDataRequest());
    fetch('https://jsonplaceholder.typicode.com/posts')
      .then(response => response.json())
      .then(data => {
        dispatch(fetchDataSuccess(data));
      })
      .catch(error => {
        dispatch(fetchDataFailure());
      });
  };
};

创建 Store Provider

在 React Native 应用程序中使用 Redux,我们需要在最上层组件中包装整个应用程序,提供一个 Redux store。我们可以使用 react-redux 提供的 Provider 组件来实现这个功能。

import React from 'react';
import { Provider } from 'react-redux';
import App from './App';

const Root = ({ store }) => {
  return (
    <Provider store={store}>
      <App />
    </Provider>
  );
};

export default Root;

连接 Redux 和 React Native 组件

为了连接 Redux store 和 React Native 组件,我们需要使用 react-redux 提供的 connect 方法。

import React, { useEffect } from 'react';
import { View, Text } from 'react-native';
import { connect } from 'react-redux';
import { fetchData } from './actions';

const App = ({ fetchData, data, isLoading, isError }) => {
  useEffect(() => {
    fetchData();
  }, []);

  if (isLoading) {
    return <Text>Loading...</Text>;
  }

  if (isError) {
    return <Text>Error fetching data</Text>;
  }

  return (
    <View>
      {data.map((item) => {
        return <Text key={item.id}>{item.title}</Text>;
      })}
    </View>
  );
};

const mapStateToProps = (state) => {
  return {
    data: state.data,
    isLoading: state.isLoading,
    isError: state.isError
  };
};

const mapDispatchToProps = { fetchData };

export default connect(mapStateToProps, mapDispatchToProps)(App);

总结

结合 React Native 和 Redux 编写高质量的代码需要较高的技术水平和经验,但在实际的开发中,Redux 是管理应用程序状态的最佳实践之一。因此,我们强烈建议开发人员在目标应用程序中使用 Redux,以达到更高的代码质量和可维护性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a5eb37add4f0e0ffe7e319


纠错反馈