javascript - 在 useEffect 中更改数组值
问题描述
我对javascript / React很陌生,不到5个月的经验,所以有很多错误,我想要实现的是......
当用户单击按钮时,国家/地区值会发生变化,我想做这样的事情。
if (country === "Singapore") { setTeams(sg.items) } else { setTeams(my.items) }
但我无法在 useEffect 钩子中实现它,或者我的方法是错误的。
const [country, setCountry] = useState("Singapore")
const sg = data.sgteamlist
const my = data.myteamlist
useEffect(() => {
setTeams(sg.items)
}, [])
const [teams, setTeams] = useState([])
const [currentPage, setCurrentPage] = useState(1)
const [teamsPerPage] = useState(5)
// Get current teams
const indexOfLastTeam = currentPage * teamsPerPage
const indexOfFirstTeam = indexOfLastTeam - teamsPerPage
const currentTeams = teams.slice(indexOfFirstTeam, indexOfLastTeam)
const paginate = pageNumber => setCurrentPage(pageNumber)
return (
<Layout>
<Box px="7.5%" color="white.50" pb="20rem">
<SEO title="About" />
<Helmet bodyAttributes={{ class: "about-page" }} />
<TeamGrid teams={currentTeams} />
<ButtonToggler onClick={() => setCountry("Singapore")}>
Singapore
</ButtonToggler>
<ButtonToggler onClick={() => setCountry("Malaysia")}>
Malaysia
</ButtonToggler>
<Pagination
teamsPerPage={teamsPerPage}
totalTeams={teams.length}
paginate={paginate}
/>
</Box>
</Layout>
)
}
export default AboutPage
我想根据国家/地区的值更改 setTeams 数组。
解决方案
country
作为依赖项添加到您的效果中。每次变量不同时,依赖数组都会运行你的效果,基于浅层检查。
此外,您应该在状态变量的定义之后移动您的 useEffect teams
。
const [teams, setTeams] = useState(sg.items);
useEffect(() => {
if(country === 'Singapore') {
setTeams(sg.items)
} else {
setTeams(my.items)
},
}, [country])
推荐阅读
- reactjs - 获取使用在 IE11 中工作的 create-react-app 创建的应用程序
- javascript - 如何在用户单击复选框所在的行时切换复选框?
- swift - Stripe 与 iOS 的集成:保存和引用已保存的卡片
- google-cloud-platform - 数据流 - 使用私有 IP 调用外部 API
- python - 无法在 Django 的同一数据库中的第二个表中插入数据
- javascript - Discordjs我如何发送带有多链接的嵌入消息
- reactjs - 如何使用钩子复制此设置状态逻辑
- python - 试图理解 sort(key = ...) 函数
- image - Pandoc 2.x 以不可访问的方式呈现图像的替代文本
- javascript - 从可疑的异步函数中获取变量