React-将数组映射到子组件

nox*_*sta 8 javascript arrays reactjs

我正在编码一个包含多个页面的网站。一个页面ComponentA,具有一个子组件,该子组件返回带有标题和段落的部分。

ComponentA传递数据中的数组作为对子项的支持。在孩子内部,一个map函数返回正确的段落。现在缺少的标题,你会怎么做传递title1paragraph1title2paragraph2等?

组分A:

import Child from "../components/child";

const ComponentA = () => {
  <Layout>
    <h1>Home Page</h1>
    <Child title={info.title} text={info.text} />
  </Layout>
}

const info = {
  title: ["Title1", "Title2"],
  text: ["Paragraph1", "Paragraph2"]
};
Run Code Online (Sandbox Code Playgroud)

子组件:

const Child = ({ text, title }) => {
  return (
    <div>
      {text.map(text => {
        return (
          <div>
            <h3>{title}</h3>
            <p>{text}</p>
          </div>
        );
      })}
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

kuk*_*kuz 5

你的info对象不是一个可迭代的列表- 所以我会将它们转换成一个列表,{title, text}如下所示:

const data = info.title.map((e,i) => {
  return {title : e, text: info.text[i]}
})
Run Code Online (Sandbox Code Playgroud)

现在我将把map()函数转移到ComponentA而不是Child因为这使得子组件更有意义

请参阅下面的演示:

const data = info.title.map((e,i) => {
  return {title : e, text: info.text[i]}
})
Run Code Online (Sandbox Code Playgroud)
const info = {
  title: ["Title1", "Title2"],
  text: ["Paragraph1", "Paragraph2"]
};

const data = info.title.map((e,i) => {
  return {title : e, text: info.text[i]}
})

const ComponentA = () => {
  return (
    <div>
      <h1>Home Page</h1>
      { data.map(item => {
          return (
            <Child key={item.title} title={item.title} text={item.text} />
          );
        })
      }
    </div>
  )
}

const Child = ({ text, title }) => {
  return (
    <div>
      <h3>{title}</h3>
      <p>{text}</p>
    </div>
  );
};

ReactDOM.render(
  <ComponentA/>, 
  document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)


Cod*_*iac 1

您可以像这样更改您的子组件,因为它text是一个数组,因此您需要通过索引访问它的值。

const Child = ({ text, title }) => {
  return (
    <div>
      {text.map((text,index) => {
        return (
          <div>
            <h3>{title[index]}</h3>
            <p>{text}</p>
          </div>
        );
      })}
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

您甚至可以将父组件更改为这样的

import Child from "../components/child";

const ComponentA = () => {
  <Layout>
    <h1>Home Page</h1>
    {info.text.map((text,index)=> <Child title={info.title[index]} text={text} />}
  </Layout>
}

const info = {
  title: ["Title1", "Title2"],
  text: ["Paragraph1", "Paragraph2"]
};
Run Code Online (Sandbox Code Playgroud)

然后你的孩子应该是

const Child = ({ text, title }) => {
  return (
    <div>
          <h3>{title}</h3>
          <p>{text}</p>
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)