首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在functional react组件中对数组进行一次混洗?

如何在functional react组件中对数组进行一次混洗?
EN

Stack Overflow用户
提问于 2020-04-17 10:53:10
回答 2查看 1.1K关注 0票数 2

我正在创建一个记忆游戏,我有一个混洗数组的混洗函数,这些数字被渲染为卡片,问题是每次状态改变时,卡片都会被混洗,我只需要用一个混洗的数组初始化我的组件,即使状态改变了也是如此!

我尝试过useEffect,但它不起作用,或者我无法正确地实现它

代码:

代码语言:javascript
复制
const numbers = [1, 2, 3, 1, 2, 3];

const shuffle = (arr) => {
//shuffle logic here
}

let shuffledCards;
useEffect(() => {
   shuffledCards = shuffle(numbers) // it doesn't help
}, [])

return(
  <cards shuffledCards={shuffledCards} />
)

我如何才能一次置乱我的数组,而不是每次状态改变!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-17 11:40:10

你可以使用useMemo钩子。

代码语言:javascript
复制
const shuffle = (arr) => {
  //shuffle logic here
}

const shuffledCards = React.useMemo(() => {
  const numbers = [1, 2, 3, 1, 2, 3];  
  return shuffle(numbers);
}, [])

return (
  <cards shuffledCards={shuffledCards} />
)
票数 3
EN

Stack Overflow用户

发布于 2020-04-17 10:59:23

你的功能是重新定义你的数组shuffleCards每个渲染。如果您将数组置于状态,它将是稳定的。

numbersshuffle外部组件定义为初始状态和效用函数

代码语言:javascript
复制
const numbers = [1, 2, 3, 1, 2, 3];

const shuffle = array => {
  // shuffle logic
};

组件逻辑:初始化状态,并在组件挂载时使用效果来混洗数组

代码语言:javascript
复制
const CardShuffler = () => {
  const [shuffledCards] = useState(shuffle(numbers)); // initialize state

  return <Cards shuffledCards={shuffledCards} />;
};

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61263368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档