如何为数组中的特定元素呈现组件
How to render a component for particular element in a array
我有一个数组,仅当数组长度大于 2 时才需要显示一个组件(在我的例子中是 <span>Delete</span>
),并且不显示在前两个数组元素中,而是显示在其他元素。
示例:
array = ["一","二","三","四"]
由于数组长度大于 2,因此在“三”和“四”中显示 <span>Delete</span>
。
在上面的例子中,即使数组的长度大于 2,也不会在前两个元素( "One" 和 "Two" )中显示。
代码:
const App = () => {
const [element, setElement] = useState(["element"]);
return (
<>
{element.map((e) => (
<div>
<span>{e}</span>
{element.length > 2 && <span style={{color:"red"}}>{" "}Delete</span>}
</div>
))}
<button onClick={() => setElement((element) => [...element, "element"])}>Add</button>
</>
);
};
以上代码显示了所有元素中的“删除”文本
应该只显示第二个索引之后的元素。
代码沙箱:https://codesandbox.io/s/basic-antd-4-16-9-forked-2w3lg5?file=/index.js:98-478
你可以这样做
{element.length > 2 && element.map((ele,index) => {
if(index > 1){
return <p>{ele}</p>
}
else{
return <></>
}
})}
使用您正在迭代的元素的索引(.map
回调中的第二个参数)来检查索引是否为 2 或更多 - 如果是,您可以显示删除,否则不要显示它。
const App = () => {
const [elements, setElements] = useState(["element"]);
return (
<>
{elements.map((e, i) => (
<div>
<span>{e}</span>
{elements.length > 2 && i >= 2 && <span style={{color:"red"}}>{" "}Delete</span>}
</div>
))}
(因为状态是一个数组,所以将其名称设为复数比单数 element
更有意义,这听起来像一个数组 item)
您还需要检查当前项目的索引是否大于1
。
const App = () => {
const [element, setElement] = React.useState(["element"]);
return (
<React.Fragment>
{element.map((e, i) => (
<div>
<span>{e}</span>
{i > 1 && element.length > 2 && <span style={{ color: "red" }}>Delete</span>}
</div>
))}
<button onClick={() => setElement((element) => [...element, "element"])}>
Add
</button>
</React.Fragment>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>
您需要访问当前元素 (e
) 的当前索引,因此将其包含在 map()
的参数列表中。
其次,判断索引(idx
)是否大于等于(>=
)的条件 2.
const App = () => {
const [element, setElement] = useState(["element"]);
return (
<>
{element.map((e, idx) => (
<div>
<span>{e}</span>
{element.length && idx >= 2 && <span style={{color:"red"}}>{" "}Delete</span>}
</div>
))}
<button onClick={() => setElement((element) => [...element, "element"])}>Add</button>
</>
);
};
我有一个数组,仅当数组长度大于 2 时才需要显示一个组件(在我的例子中是 <span>Delete</span>
),并且不显示在前两个数组元素中,而是显示在其他元素。
示例:
array = ["一","二","三","四"]
由于数组长度大于 2,因此在“三”和“四”中显示 <span>Delete</span>
。
在上面的例子中,即使数组的长度大于 2,也不会在前两个元素( "One" 和 "Two" )中显示。
代码:
const App = () => {
const [element, setElement] = useState(["element"]);
return (
<>
{element.map((e) => (
<div>
<span>{e}</span>
{element.length > 2 && <span style={{color:"red"}}>{" "}Delete</span>}
</div>
))}
<button onClick={() => setElement((element) => [...element, "element"])}>Add</button>
</>
);
};
以上代码显示了所有元素中的“删除”文本
应该只显示第二个索引之后的元素。
代码沙箱:https://codesandbox.io/s/basic-antd-4-16-9-forked-2w3lg5?file=/index.js:98-478
你可以这样做
{element.length > 2 && element.map((ele,index) => {
if(index > 1){
return <p>{ele}</p>
}
else{
return <></>
}
})}
使用您正在迭代的元素的索引(.map
回调中的第二个参数)来检查索引是否为 2 或更多 - 如果是,您可以显示删除,否则不要显示它。
const App = () => {
const [elements, setElements] = useState(["element"]);
return (
<>
{elements.map((e, i) => (
<div>
<span>{e}</span>
{elements.length > 2 && i >= 2 && <span style={{color:"red"}}>{" "}Delete</span>}
</div>
))}
(因为状态是一个数组,所以将其名称设为复数比单数 element
更有意义,这听起来像一个数组 item)
您还需要检查当前项目的索引是否大于1
。
const App = () => {
const [element, setElement] = React.useState(["element"]);
return (
<React.Fragment>
{element.map((e, i) => (
<div>
<span>{e}</span>
{i > 1 && element.length > 2 && <span style={{ color: "red" }}>Delete</span>}
</div>
))}
<button onClick={() => setElement((element) => [...element, "element"])}>
Add
</button>
</React.Fragment>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>
您需要访问当前元素 (e
) 的当前索引,因此将其包含在 map()
的参数列表中。
其次,判断索引(idx
)是否大于等于(>=
)的条件 2.
const App = () => {
const [element, setElement] = useState(["element"]);
return (
<>
{element.map((e, idx) => (
<div>
<span>{e}</span>
{element.length && idx >= 2 && <span style={{color:"red"}}>{" "}Delete</span>}
</div>
))}
<button onClick={() => setElement((element) => [...element, "element"])}>Add</button>
</>
);
};