Изменение значения переменной в render () - PullRequest
0 голосов
/ 10 июля 2019

Итак, для начала приведу немного кода, я объясню, чего я пытаюсь достичь, а что не работает дальше:

render() {
    return (
      <div className='custom-modal'>
        <Link to='/c' onClick={this.hideFader}>
          <Icon name='close' className='close-button' size='big' />
        </Link>

        <h1>Your contributions</h1>
        {this.props.requests.map(d => {
          return (
            <div className='chat-thread' key={uuidv1()}>
              <Link to={`/c/contribution/${d.id}`}>
                <div>
                  <h2>{d.title}</h2>
                  <p>{d.description}</p>
                  <p>ID: {d.id}</p>
                </div>
              </Link>
              <div>
                <Icon
                  name='close'
                  className='request-delete'
                  onClick={this.show}
                  size='big'
                />
                <Confirm
                  open={this.state.open}
                  content={`Are you sure you want to delete this request? All the information including the chat linked to this request will be deleted!`}
                  onCancel={this.handleCancel}
                  onConfirm={this.handleConfirm(d.id)}
                  size={'mini'}
                />
              </div>
            </div>
          )
        })}
      </div>
    )
  }

Так что это мой метод render().

То, что я пытаюсь сделать здесь, это небольшой компонент, который будет перенаправлять на маршрут, я добился этого с помощью <Link />, и смена маршрута работает (он перенаправляет на тот же идентификатор).

Теперь, если вы продолжите читать код, вы увидите это <p>ID: {d.id}</p>. Это тоже хорошо работает (так что я имею в виду, что идентификатор, который я получил в <Link />, и идентификатор в <p></p> совпадают.

Теперь вот сложная часть, вот конкретная часть, о которой я говорю:

<Icon
   name='close'
   className='request-delete'
   onClick={this.show}
   size='big'
/>
<Confirm
   open={this.state.open}
   content={`Are you sure you want to delete this request? All the information including the chat linked to this request will be deleted!`}
   onCancel={this.handleCancel}
   onConfirm={this.handleConfirm(d.id)}
   size={'mini'}
/>

Эта часть находится в том же возвращении, но по некоторым причинам эта строка возвращает другой идентификатор: onConfirm={this.handleConfirm(d.id)}

Я проверил это, и первые 2 идентификатора возвращают 1, последний (тот, что выше) возвращает 2 (2 - это идентификатор другого элемента, который загружен, всего 2 с идентификаторами 1 и 2 соответственно ).

Вот мой handleConfirm(id):

handleConfirm = id => () => {
    console.log(id)
    this.setState({ open: false })
    fetch(`http://localhost:3000/requests/${id}`, {
      method: 'DELETE',
      headers: {
        'Content-Type': 'application/json',
        'X-User-Email': localStorage.getItem('email'),
        'X-User-Token': localStorage.getItem('token')
      }
    })
  }

Таким образом, console.log выдает 2, в то время как другие d.id выдают 1

РЕДАКТИРОВАТЬ: Я сделал несколько проверок, и происходит то, что независимо от того, какую кнопку удаления вы нажмете, она будет принимать идентификатор последней. Так что, если есть идентификаторы от 1 до 5, независимо от того, что вы нажимаете, они будут проходить через 5. Если я сделаю это из <Confirm /> и добавлю onClick() к <Icon /> выше, это будет работать. Кажется, что это проблема с пакетом semantic-ui-react, но не уверен, кто-нибудь может указать на это?

1 Ответ

0 голосов
/ 10 июля 2019

Разве это не должно быть onConfirm={()=>this.handleConfirm(d.id)} вместо onConfirm={this.handleConfirm(d.id)}?

Что делает handleConfirm()?

пс. Мне не хватает представителя, чтобы комментировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...