Как настроить обработчик onChange для отслеживания изменений в полях ввода, которые динамически отображаются из массива объектов в React

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть форма, которая содержит поле ввода, которое динамически отображается из этого массива объектов.

 const searchParams = [
    {
      name: 'certificateNo',
      title: 'Certificate Number',
      state: false,
      value: '',
    },
    {
      name: 'oldCertificateNo',
      title: 'Old Certificate Number',
      state: false,
      value: '',
    },
    { name: 'shareVolume', title: 'Share Volume', state: false, value: '' },
    { name: 'accountNo', title: 'Account Number', state: false, value: '' },
    {
      name: 'oldAccountNo',
      title: 'Old Account Number',
      state: false,
      value: '',
    },
    { name: 'rin', title: 'RIN', state: false, value: '' },
    {
      name: 'certificateIssueDate',
      title: 'Certificate Issue Date',
      state: false,
      value: '',
    },
    { name: 'clientName', title: 'Client Name', state: true, value: '' },
    { name: 'holderName', title: 'Holder Name', state: true, value: '' },
    { name: 'holderAddress', title: 'Holder Address', state: true, value: '' },
  ];
 

Я визуализирую поле ввода, используя этот код

 <div className="search_inner_container">
                        {searchParams.map(
                          (item) =>
                            item.state amp;amp; (
                              <Form.Item key={item.name} name={item.name}>
                                <Row className="search-row" align="middle">
                                  <Col span={7} style={{}}>
                                    {item.title}:{' '}
                                  </Col>
                                  <Col span={17}>
                                    <Input
                                      style={{
                                        background: '#FFFFFF',
                                        borderBottom: '1px solid grey',
                                      }}
                                    />
                                  </Col>
                                </Row>
                              </Form.Item>
                            ),
                        )}
                      </div>
 

Поля ввода отображаются только тогда, когда состояние равно true. Что мне нужно сделать, так это создать событие onChange для отслеживания изменений в поле ввода. Есть идеи, как это сделать?

Ответ №1:

Я не понимаю, чего вы хотите, но если вам нужно добавить значение ввода в массив object, вам нужно сделать так, но лучше сделать массив object в useContext или useState крючках.

 <div className="search_inner_container">
  {searchParams.map(
    (item, index) =>
      item.state amp;amp; (
       <Form.Item key={item.name} name={item.name}>
        <Row className="search-row" align="middle">
          <Col span={7} style={{}}>
             {item.title}:{' '}
          </Col>
          <Col span={17}>
            <Input
              style={{
               background: '#FFFFFF',
               borderBottom: '1px solid grey',
              }}
             onChange={(e)=>{searchParams[index].value = e.target.value }}
           />
         </Col>
      </Row>
   </Form.Item>
    ),
    )}
</div>