首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用循环反应,自增

用循环反应,自增
EN

Stack Overflow用户
提问于 2020-12-08 09:54:34
回答 2查看 1K关注 0票数 1

我正在尝试做自我编号递增循环。

为每个组件重新设置数字从1开始的provider

代码语言:javascript
复制
   <ContextProvider>
      <SimpleDiv num={"1"} />
      <SimpleDiv num={"2"} />
    </ContextProvider>

我目前正在手动将数字放到道具上。

我想要的结果

代码语言:javascript
复制
block - 1
block - 2
----------------
block - 1
block - 2
block - 3

正试图让to循环通过。但是它返回不定式循环。

代码语言:javascript
复制
const LoopNum = () => {
  const contextNumber = useContext(Context);
  const [number, setNumber] = useState(contextNumber);
  setNumber((num) => num + 1);
  return number;
};

这是演示。https://codesandbox.io/s/funny-sid-49i1n

其思想是使数字道具自动具有增量号。

例如:

代码语言:javascript
复制
const Component1 = () => {
  const newNumber = LoopNum();
  return (
    <ContextProvider>
      <SimpleDiv num={newNumber} />
      <SimpleDiv num={newNumber} />
    </ContextProvider>
  );
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-08 10:08:30

你可以用React.Children.mapReact.cloneElement来做

代码语言:javascript
复制
const ContextProvider = ({ children }) => {
  const numberedChildren = React.Children.map(children, (child, index) =>
    React.cloneElement(child, { num: index + 1 })
  );
  return <Provider value={{ number: 0 }}>{numberedChildren}</Provider>;
};

然后你可以像这样使用它

代码语言:javascript
复制
<ContextProvider>
  <SimpleDiv />
  <SimpleDiv />
</ContextProvider>

更新代码框:https://codesandbox.io/s/fervent-moon-um9s3?file=/src/App.js

票数 1
EN

Stack Overflow用户

发布于 2020-12-08 10:13:10

您可以创建一个组件,通过传递的循环数来循环返回元素。就像这样:

代码语言:javascript
复制
import React from "react";

const SimpleDiv = ({ num }) => <div>block - {num}</div>;

const LoopComponent = ({ loopNum }) => {
  return [...Array(loopNum)].map((_, index) => (
    <SimpleDiv key={index} num={index + 1} />
  ));
};

export default function App() {
  return (
    <div>
      <LoopComponent loopNum={2} />
      <LoopComponent loopNum={3} />
    </div>
  );
}

工作沙箱:https://codesandbox.io/s/ecstatic-bird-ptxxo

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

https://stackoverflow.com/questions/65196679

复制
相关文章

相似问题

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