【问题标题】:dispatching an action from componentDidMount从 componentDidMount 调度一个动作
【发布时间】:2020-10-23 00:59:28
【问题描述】:

我必须在组件安装到 react 之后获取一些数据。我正在使用 componentDidMount 方法,在里面我想调度一个动作但是当我调用 popular() 时(参见代码) 它什么也不做,如果我这样做 dispatch(popular()) 它会显示错误,即 dispatch 和 popula 未定义 请注意,我没有使用 mapDispatchtoProps。我能做些什么来获取数据?任何帮助将不胜感激。

/action.js

export function popular(){
    return dispatch=>{
        return fetch(`https://api.themoviedb.org/3/movie/popular?api_key=<key>&language=en-US&page=1`)
                .then(data=>data.json())
                .then(data=>{
                        console.log("fetched",data);
                        dispatch({
                        type:"popular",
                        data:data.results,
                        page:data.page,
                        total_pages:data.total_pages,
                        total_results:data.total_results
                        })
     
                    })
    }
}

/App.js

import React from 'react';
import {Header} from './header.js';
import {Searchbar} from './searchbar.js';
import {Thumbnails}from './Thumbnails.js';
import {connect} from 'react-redux';
import {Select} from './select.js';
import { Pagination } from './pagination.js';
import {Filterbar} from './filterbar.js';
import { popular } from '../redux/action.js';

class App extends React.Component {
    componentDidMount(){
        console.log("heloo");
        popular();
           
        }

    render(){
        return (
            <>
                <Header /> 
                <Select {...this.props}/>
                <Filterbar/>
                <Searchbar {...this.props}/> 
                <Thumbnails {...this.props}/>
                <Pagination {...this.props}/>       
            </>
        );
    }
}

function mapStateToProps(state){
    return {
        state:state
    }
}

export default connect(mapStateToProps)(App)

【问题讨论】:

    标签: reactjs redux react-redux action reducers


    【解决方案1】:

    要调度 popular 动作,您需要提供 redux-thunk 中间件给 redux 并通过 mapDispatchToProps 传递 popular 动作。

    这里是一个例子:

    componentDidMount() {
      this.props.getPopular();           
    }
    
    ....
    
    function mapDispatchToProps(dispatch) {
     return { getPopular: () => dispatch(popular()) };
    }
    

    thunk docs 中了解更多信息。 另外我建议你刷新basics of redux。只是因为你有些困惑。命名和用法告诉我。

    【讨论】:

    • 我使用了 thunk ...但不是 mapDispatchtoProps。是否有必要使用 mapDispatchtoProps。没有它我已经调度了一些其他操作 ..但它们不在生命周期方法中。
    • popular 返回一个期望 dispatch 作为参数的函数。 Thunk 会将其提供给异步操作。我会更新答案来写一个例子。
    • 如果我想调用一个以事件为参数的动作创建者怎么办
    • 只需将它作为参数传递给popular(someArg1, someArg2) { ... }。 mapDispatchToProps 中的用法:(arg1, arg2) =&gt; dispatch(popular(arg1, arg2));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多