如何在 React 中生成动态 DOM 元素
How generate dynamic DOM element in React
我正在通过网络获取元素列表。每次调用时列表大小可能会有所不同。我必须在基于 React ant-design 的网站中显示列表内容。如何生成这个动态组件?我所做的是,
export const myModal = props => {
const contactArr = [];
for(let i=1;i<=props.contactList;i++){
const eachRow = `<Row style={{border : '1px solid red'}}>
<Col>
<Text>Test<Text>
</Col>
</Row>`
contactArr.push(eachRow);
}
return (
<Modal
visible={props.isVisible}
width={'40%'}
onCancel={props.handleEditModalCancel}
footer={[
<Button key="back" onClick={props.handleContactModalCancel}>
Cancel
</Button>,
<Button key="submit" type="primary" onClick={props.contactModalConfirm}>
{/*<Button key="submit" type="primary" onClick={props.inputSubmit}>*/}
Submit
</Button>
]}
>
<div>
{contactArr.join('')}
</div>
</Modal>
);
}
但是,我得到的不是带列的渲染行,而是简单的字符串输出,例如,
<Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row>
如何获得这样的渲染输出。据我所知,我的方法是否正确 DOM 直接操作在 React 中不好?我需要添加任何密钥吗?
获得我想要的结果的最佳方法是什么?
非常感谢。
您可以使用 map 使用数据数组创建 React 元素。
一个简单的例子就是这样。
// inside your return statement.
return (
<div>
{props.contactList.map(contact => {
return <p>{contact}</p>
})
</div>
)
另一个例子
import React from 'react';
export default function App() {
const numbers = [1, 2, 3]
return (
<div>
{numbers.map(num => {
return (
<div>
<p>{num}</p>
</div>
)
})}
</div>
)
}
我正在通过网络获取元素列表。每次调用时列表大小可能会有所不同。我必须在基于 React ant-design 的网站中显示列表内容。如何生成这个动态组件?我所做的是,
export const myModal = props => {
const contactArr = [];
for(let i=1;i<=props.contactList;i++){
const eachRow = `<Row style={{border : '1px solid red'}}>
<Col>
<Text>Test<Text>
</Col>
</Row>`
contactArr.push(eachRow);
}
return (
<Modal
visible={props.isVisible}
width={'40%'}
onCancel={props.handleEditModalCancel}
footer={[
<Button key="back" onClick={props.handleContactModalCancel}>
Cancel
</Button>,
<Button key="submit" type="primary" onClick={props.contactModalConfirm}>
{/*<Button key="submit" type="primary" onClick={props.inputSubmit}>*/}
Submit
</Button>
]}
>
<div>
{contactArr.join('')}
</div>
</Modal>
);
}
但是,我得到的不是带列的渲染行,而是简单的字符串输出,例如,
<Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row><Row style={{border : '1px solid red'}}> <Col> <Text>Test<Text> </Col> </Row>
如何获得这样的渲染输出。据我所知,我的方法是否正确 DOM 直接操作在 React 中不好?我需要添加任何密钥吗?
获得我想要的结果的最佳方法是什么?
非常感谢。
您可以使用 map 使用数据数组创建 React 元素。
一个简单的例子就是这样。
// inside your return statement.
return (
<div>
{props.contactList.map(contact => {
return <p>{contact}</p>
})
</div>
)
另一个例子
import React from 'react';
export default function App() {
const numbers = [1, 2, 3]
return (
<div>
{numbers.map(num => {
return (
<div>
<p>{num}</p>
</div>
)
})}
</div>
)
}