Передача информации из формы в функцию React js

Я новичок в реагировании и js, и я хочу создать форму редактирования, содержащую некоторую изменяемую информацию, которую позже можно будет опубликовать в API с помощью Axios. дело в том, что я не ввожу свою функцию, когда нажимаю кнопку отправки, и я не знаю, правильно ли передана информация моей формы в мою функцию редактирования.

function EditJob (jobid, event) {
  console.log('editjob fired 1')
  console.log(jobid)

  const updateJob = {
    title: event.target.jobtitle.value,
    company_name: event.target.companyname.value,
    internal_code: event.target.internalcode.value,
    department: event.target.department.value,
    location: event.target.jlocation.value,
    tags: event.target.tags.value,
    benefits: event.target.benefits.value,
    description: event.target.description.value,
    requirements: event.target.requirements.value
  }
  return axios({
    method: 'put',
    url: '/api/jobs/update-job/' + jobid,
    headers: headers,
    data: updateJob
  })
}
export default function Jobs () {
  const classes = useStyles()
  const [jobs, locations, departments, tags, deleteJob, editJob] = useJobs()
  const [show, setShow] = React.useState(false)

  const handleClose = () => setShow(false)
  const handleShow = () => setShow(true)

  return (
    <>
   {jobs.map(job => (
          <>
            <Modal show={show} onHide={handleClose}>
              <Modal.Header closeButton>
                <Modal.Title>Edit Job Position</Modal.Title>
              </Modal.Header>
              <Modal.Body>

                <div className='container'>

                <Form onSubmit = {async () => { await EditJob(job.id); editJob() }}>

                <Row>
                  <Col lg={6}>
                    <Form.Group controlId='jobtitle'>
                      <Form.Label style={{ color: 'green' }}>Job Title :</Form.Label>
                      <Form.Control type='textbox' defaultValue={job.title} name='jobtitle' required placeholder='Enter Job Title' />
                    </Form.Group>

                    <Form.Group controlId='internalCode'>
                      <Form.Label style={{ color: 'green' }}>Internal Code :</Form.Label>
                      <Form.Control type='textbox' defaultValue={job.internal_code} name='internalcode' required placeholder='Enter Internal Code' />
                    </Form.Group>

                    <Form.Group controlId='department'>
                    <Form.Label style={{ color: 'green' }}>Department :</Form.Label>
                    <Form.Control type='textbox' defaultValue={job.department} name='department' disabled required placeholder='Enter Department' />
                  </Form.Group>

                  </Col>
                <Col lg={6}>

                  <Form.Group controlId='jlocation'>
                    <Form.Label style={{ color: 'green' }}>Location :</Form.Label>
                    <Form.Control type='textbox' defaultValue={job.location} name='jlocation' disabled required placeholder='Enter Location' />
                  </Form.Group>

                </Col>
              <Col lg={12}>
              <Form.Group>
                <Button style={{ position: 'relative', left: '295px' }} variant='success' type='submit'>Edit Job Position</Button>
              </Form.Group>
              </Col>
            </Row>
              </Form>
                </div>
              </Modal.Body>
        </Modal>

updateJob const должен содержать информацию, отправленную из формы с использованием event.target, но я думаю, что делаю что-то не так, потому что я даже не вхожу в функцию, а моя страница просто обновляется, когда я нажимаю кнопку отправки. какое правильное решение для этого?


person lydal    schedule 30.05.2020    source источник


Ответы (1)


По умолчанию форма запускается перезагрузкой при нажатии кнопки отправки. Вы можете предотвратить такое поведение, используя event.preventDefault() в методе onSubmit

<Form onSubmit = {async (event) => {
       event.preventDefault(); 
       await EditJob(job.id); 
       editJob() 
}}>
person Shubham Khatri    schedule 30.05.2020
comment
Я получаю сообщение об ошибке undefined, но почему? - person lydal; 30.05.2020
comment
Вы определили это в аргументе функции, например onSubmit = {async (event) => { - person Shubham Khatri; 30.05.2020
comment
обновление: я удалил событие из задания редактирования, и оно было исправлено - person lydal; 30.05.2020
comment
Правильно, ваша функция EditJob не передавала событие. - person Shubham Khatri; 30.05.2020
comment
простите меня еще один вопрос: <Form.Control type='textbox' defaultValue={job.tags} name='tags' disabled required placeholder='Enter tags' /> здесь мой сервер возвращает ошибку 400, потому что tags: Array [ "Expected a list of items but got type \"str\"." ] - person lydal; 30.05.2020
comment
как я могу это исправить или преобразовать в массив? - person lydal; 30.05.2020
comment
Я не могу использовать {job.tags.split(,)} - person lydal; 30.05.2020
comment
почему ты не можешь разделить, если это строка? - person Shubham Khatri; 30.05.2020
comment
он говорит, что работа, tags.split (',') не является функцией - person lydal; 30.05.2020
comment
Давайте продолжим это обсуждение в чате. - person lydal; 30.05.2020
comment
не могли бы вы проверить чат? - person lydal; 30.05.2020