如何在 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>
  )
}