【发布时间】:2022-01-27 19:30:43
【问题描述】:
在我的页面中,我在 useEffect 中调用了一个操作来填充我的减速器。我有一个名为 page 的组件级别状态,它是操作中的一个参数。因此,每次page 的值发生变化时,我都希望再次调用该操作,因为显然我打算从不同的页面获取数据。
遗憾的是,我在控制台中遇到错误,告诉我组件已达到其重新渲染次数的限制。
以下是相关代码:
const Home = props => {
const [page, setPage] = useState(1);
useEffect(() => {
props.getPopularMovies(page);
}, [page])
我的props.getPopularMovies 函数来自我的mapDispatchToProps 函数,该函数被传递到connect()
整个主页:
import React, { useEffect, useState } from 'react'
import { connect } from "react-redux";
// Actions
import { getPopularMovies } from "../actions/movies.action";
const Home = (props) => {
const [page, setPage] = useState(1);
useEffect(() => {
props.getPopularMovies(page);
}, [page])
return (
<div>
{props.movies && props.movies.length > 0 && props.movies.data.results.map(movie => (
<p key={movie.id}>{movie.title}</p>
))}
<button onClick={setPage(page + 1)}>Next Page</button>
</div>
)
}
const mapStateToProps = state => {
return {
movies: state.movies.movies
}
}
export default connect(mapStateToProps, {
getPopularMovies
})(Home)
动作文件:
import axios from "axios";
import { GET_MOVIES_FAIL, GET_MOVIES_SUCCESS } from "../constants/movies.constants"
export const getPopularMovies = (page) => async (dispatch) => {
try {
const config = {
params: {
api_key: process.env.REACT_API_KEY,
page
}
};
const movies = await axios.get('/movie/popular', config);
dispatch({
type: GET_MOVIES_SUCCESS,
payload: movies
})
} catch (err) {
dispatch({
type: GET_MOVIES_FAIL,
payload: err
})
}
}
【问题讨论】:
-
谁在使用
setPage? -
请分享 getPopularMovies 的代码
-
我已更新问题以包含更多代码 :) @SiddharthS.
-
在更新后的问题中,您将看到它被用于按钮单击@Krasimir
-
@JaredSmith 不太明白,我知道它会在
page更改时运行,因为它在依赖数组中,不确定您在第二部分中的意思。
标签: javascript reactjs use-effect