react服务端渲染redux添加

Posted longlongdan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react服务端渲染redux添加相关的知识,希望对你有一定的参考价值。

  1. 使用,添加一个redux-thunk中间件,支持异步action操作
    import  Provider  from ‘react-redux‘;
    import  createStore, applyMiddleware  from ‘redux‘;
    import thunk from ‘redux-thunk‘;
    
    import Router from ‘../router‘
    import Rducer from ‘../reducer‘
    
    const Store = createStore(Rducer, applyMiddleware(thunk));
    
    const App = () => 
        return(
            <Provider store=Store>
                <BrowserRouter>
                    <Router/>
                </BrowserRouter>
            </Provider>
        )
    
  2. 默认情况下redux只能dispatch一个plain object,例如:

    dispatch(
        type: ‘SOME_ACTION_TYPE‘,
        data: ‘xxxx‘
    );

    使用 redux-thunk 之后,可以dispatch一个函数了,这个函数会接收dispatch, getState作为参数,在这个函数里你就可以干你想干的事情,在任何地方随意dispatch了,例如下面这个ajax请求:

    dispatch(function (dispatch) 
        $.get(‘/api/users‘, function(users) 
            dispatch(
                type: ‘FETCH_USERS_SUCCESS‘,
                users: users,
            );
        );
    );
  3. 这时候有一个疑问,redux-thunk的作用是什么?为什么不用异步dispatch(action)来调用?
    //thunk
    export const test = () => 
        return dispatch => 
            setTimeout(()=>
                dispatch(type: "change")
            ,1000)
        
    
    //异步dispatch
    export const test2 = (dispatch)=> 
        setTimeout(()=>
            dispatch(type: "change")
        ,1000)
    

    这二者有什么区别?

  4. 这两种写法对组件来说是没有任何区别的。我们需要注意的是redux-thunk是一个中间件,作用是对redux进行功能的增强,也就是在redux的流程中进行一些其他的处理,redux的流程:action-> dispatcher -> reducer -> store tree changed -> relative components re-render -> UI changed;我们使用thunk是在dispatch action以及action 到达action之间进行一些其他的操作。而我们直接使用异步dipatch并没有增强我们redux的功能!(暂时想到的区别就只有这个)

 

以上是关于react服务端渲染redux添加的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React/redux 中进行服务器端渲染?

React/Redux 服务端渲染初始状态

使用 redux 和 react 进行异步服务器端渲染

react + redux + saga +服务器端渲染+如何停止服务器端渲染页面的额外ajax调用?

如何在逻辑上结合 react-router 和 redux 进行客户端和服务器端渲染

浅谈服务端渲染