如何为react / redux创建加载器旋转

时间:2018-01-12 10:59:46

标签: javascript reactjs redux react-router react-redux

从数据库获取数据时,我的项目需要使用loader spin来为每个组件使用 但我不知道该怎么做。现在我只是有预加载器,可以在第一时间打开页面(CSS)。

2 个答案:

答案 0 :(得分:2)

假设您想从/charts端点获取图表数据。

//action
export const fetchOrdersChartsData = () => dispatch => {
    dispatch({ type: CHARTS_LOADING }); //Loading starts
    api.get('/charts')
      .then(charts => 
        dispatch({
          type: CHARTS_LOADED, //Loading ends
          payload: charts.data,
        }))
      .catch(error => {
       //dispatch error 
      });
  };

//reducer
export default (state = initState, action) => {
  switch (action.type) {
    case CHARTS_LOADING:
      return {
        ...state,
        loading: true,
      };
    case CHARTS_LOADED:
      return {
        ...state,
        charts: action.payload,
        loading: false,
      };
    default:
      return state;
  }
};

在您的组件中,您可以跟踪loading状态并根据该状态显示/隐藏加载程序。

import React from 'react'
import { connect } from 'react-redux';
import Loader from './Loader'
import Chart from './Chart'

class Charts extends React.PureComponent{
    render(){
        const {loading} = this.props;
        return(
            <div>
                {loading ? <Loader/> : <Chart/>}
            </div>
        )

    }
}


export default connect(
    state => ({
      loading: state.charts.loading,
    }),{})(Accumulation);

答案 1 :(得分:0)

如果你是新手,那么我建议使用包而不是创建自己的包,你可以找到很多包。

其中一个你可以在这里看到https://www.npmjs.com/package/react-loader-advanced

你可以使用

import Loader from 'react-loader-advanced';

class Example extends Component {
render() {
    if(!loaded) {return (<Loader show={true} message={<i className='material-icons spinner-icon'>autorenew</i>}></Loader>  )}
 }
}

您可以传递所需的微调器或文本。 您可以在github上阅读更多内容