Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Axios、UseEffect、Redux_Javascript_Reactjs_Redux_React Redux_Use Effect - Fatal编程技术网

Javascript Axios、UseEffect、Redux

Javascript Axios、UseEffect、Redux,javascript,reactjs,redux,react-redux,use-effect,Javascript,Reactjs,Redux,React Redux,Use Effect,为什么这个有用的效应在有限的循环中 useEffect(() => { async function fetchApi() { let res = await Axios.get(props.url + '/articles') props.loadArticles(res.data) } fetchApi() }) 知道组件一直连接到redux const mapStateToProps = (state) => ({

为什么这个有用的效应在有限的循环中

useEffect(() => {
    async function fetchApi() {
        let res = await Axios.get(props.url + '/articles')
        props.loadArticles(res.data)
    }

    fetchApi()
})
知道组件一直连接到redux

const mapStateToProps = (state) => ({
    url: state.ApiReducer.url,
    articles: state.ApiStocksReducer.articles
})

const mapDispatchToProps = (dispatch) => ({
    loadArticles: (data) => dispatch(loadArticles(data)),
    updateSelectedArticle: (data) => dispatch(updateSelectedArticle(data)),
    updateGeneralArticle: (data) => dispatch(updateGeneralArticle(data))
})

export default connect(mapStateToProps, mapDispatchToProps)(Articles);
有条件地激发效果效果的默认行为是 在每次完成渲染后激发效果。这样就产生了一种效果 如果其中一个依赖项发生更改,则始终重新创建

然而,在某些情况下,这可能是矫枉过正。我们不需要创建一个新的 每次更新时的订阅,仅当源道具已更改时

要实现这一点,请将第二个参数传递给useEffect,该参数是 效果所依赖的值的数组


可能是因为
props.loadArticles(res.data)
更新了映射到props的redux状态,并导致组件重新渲染并再次运行效果(冲洗和重复),因为效果没有依赖项数组。您实际希望效果何时运行并获取数据?
useEffect(() => {
    async function fetchApi() {
        let res = await Axios.get(props.url + '/articles')
        props.loadArticles(res.data)
    }

    fetchApi()
}, []);