姬霓太美 發表於 2022-6-22 23:31:00

React技巧之循环遍历对象

<p>原文链接:https://bobbyhadz.com/blog/react-loop-through-object</p>
<p>作者:Borislav Hadzhiev</p>
<p>正文从这开始~</p>
<h2 id="遍历对象的键">遍历对象的键</h2>
<p>在React中循环遍历对象:</p>
<ol>
<li>使用<code>Object.keys()</code> 方法得到对象的键组成的数组。</li>
<li>使用<code>map()</code>方法来迭代键组成的数组。</li>
</ol>
<pre><code class="language-jsx">export default function App() {
const employee = {
    id: 1,
    name: 'Bob',
    salary: 123,
};

return (
    &lt;div&gt;
      {/* 👇️ iterate object KEYS */}
      {Object.keys(employee).map((key, index) =&gt; {
      return (
          &lt;div key={index}&gt;
            &lt;h2&gt;
            {key}: {employee}
            &lt;/h2&gt;

            &lt;hr /&gt;
          &lt;/div&gt;
      );
      })}

      &lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;

      {/* 👇️ iterate object VALUES */}
      {Object.values(employee).map((value, index) =&gt; {
      return (
          &lt;div key={index}&gt;
            &lt;h2&gt;{value}&lt;/h2&gt;

            &lt;hr /&gt;
          &lt;/div&gt;
      );
      })}
    &lt;/div&gt;
);
}
</code></pre>
<p>我们使用<code>Object.keys</code>方法得到对象的键组成的数组。</p>
<pre><code class="language-jsx">const employee = {
id: 1,
name: 'Bob',
salary: 123,
};

// 👇️ ['id', 'name', 'salary']
console.log(Object.keys(employee));

// 👇️
console.log(Object.values(employee));
</code></pre>
<p>我们只可以在数组上调用<code>map()</code>方法。所以我们需要得到对象的键组成的数组,或者值组成的数组。</p>
<p>我们传递给<code>Array.map</code>方法的函数被调用,其中包含数组中的每个元素和当前迭代的索引。在上面的例子中,我们使用<code>index</code>作为元素上的<code>key</code>属性,如果可以的话,更好的方式是使用更加稳定的、独一无二的标识符。</p>
<p>当遍历对象的键时,使用对象的键作为<code>key</code>属性是安全可靠的,因为对象中的键保证是唯一的。</p>
<pre><code class="language-jsx">export default function App() {
const employee = {
    id: 1,
    name: 'Bob',
    salary: 123,
};

return (
    &lt;div&gt;
      {/* 👇️ iterate object KEYS */}
      {Object.keys(employee).map(key =&gt; {
      return (
          &lt;div key={key}&gt;
            &lt;h2&gt;
            {key}: {employee}
            &lt;/h2&gt;

            &lt;hr /&gt;
          &lt;/div&gt;
      );
      })}
    &lt;/div&gt;
);
}
</code></pre>
<p>然而,如果遍历对象的值,那么使用对象的值作为<code>key</code>属性是不安全的,除非你可以确保所有的值在对象中都是独一无二的。</p>
<p>由于性能的原因,React需要在内部使用<code>key</code>属性。这有助于库确保只重新渲染已经改变的数组元素。说到这里,你不会看到使用索引和一个稳定的、唯一的标识符之间有任何明显的区别,除非你要处理成千上万的数组元素。</p>
<h2 id="遍历对象的值">遍历对象的值</h2>
<p>在React中,循环遍历对象的值:</p>
<ol>
<li>使用<code>Object.values()</code> 方法得到对象的值组成的数组。</li>
<li>使用<code>map()</code>方法迭代对象值组成的数组。</li>
</ol>
<pre><code class="language-jsx">export default function App() {
const employee = {
    id: 1,
    name: 'Bob',
    salary: 123,
};

return (
    &lt;div&gt;
      {/* 👇️ iterate object VALUES */}
      {Object.values(employee).map((value, index) =&gt; {
      return (
          &lt;div key={index}&gt;
            &lt;h2&gt;{value}&lt;/h2&gt;

            &lt;hr /&gt;
          &lt;/div&gt;
      );
      })}
    &lt;/div&gt;
);
}
</code></pre>
<h3 id="objectvalues">Object.values</h3>
<p>我们使用<code>Object.values</code> 方法得到对象的值组成的数组。</p>
<pre><code class="language-jsx">const employee = {
id: 1,
name: 'Bob',
salary: 123,
};

// 👇️
console.log(Object.values(employee));
</code></pre>
<p>如果你只想渲染对象的值,你可以使用此方法直接访问它们。</p>
<h3 id="objectentries"><strong>Object.entries</strong></h3>
<p>你也可以使用<code>Object.entries</code> 方法来返回对象的键值对数组。</p>
<pre><code class="language-jsx">export default function App() {
const employee = {
    id: 1,
    name: 'Bob',
    salary: 123,
};

console.log(Object.entries(employee));

return (
    &lt;div&gt;
      {Object.entries(employee).map(() =&gt; {
      return (
          &lt;div key={key}&gt;
            &lt;h2&gt;
            {key}: {employee}
            &lt;/h2&gt;

            &lt;hr /&gt;
          &lt;/div&gt;
      );
      })}
    &lt;/div&gt;
);
}
</code></pre>
<p>下面是<code>Object.entries()</code>方法的输出。</p>
<pre><code class="language-jsx">const employee = {
id: 1,
name: 'Bob',
salary: 123,
};

// 👇️ [
//      ['id', 1],
//      ['name', 'Bob'],
//      ['salary', 123],
// ]
const result = Object.entries(employee);
console.log(result);
</code></pre>
<p>该方法返回一个包含键值对子数组的数组。</p>
<h3 id="arrayforeach">Array.forEach()</h3>
<p>另一种方法是使用<code>Array.forEach()</code>方法来迭代对象的键,并将JSX元素推送到一个数组中,然后我们进行渲染。</p>
<pre><code class="language-jsx">export default function App() {
const employee = {
    id: 1,
    name: 'Bob',
    salary: 123,
};

const results = [];

Object.keys(employee).forEach(key =&gt; {
    results.push(
      &lt;h2 key={key}&gt;
      {key}: {employee}
      &lt;/h2&gt;,
    );
});

return (
    &lt;div&gt;
      {results}
    &lt;/div&gt;
);
}
</code></pre>
<p><code>Array.forEach()</code>方法在每个键上都会被调用,然而<code>forEach()</code>方法返回<code>undefined</code>,所以我们不能直接在JSX代码中使用它。相反,我们把JSX元素推到一个数组中,然后再进行渲染。</p>
<p>需要注意的是,这是一个比较间接的方法,你不会在React应用程序中经常看到它的使用。</p><br><br>
来源:https://www.cnblogs.com/chuckQu/p/16403628.html
頁: [1]
查看完整版本: React技巧之循环遍历对象