Поворот элемента по e.target.style в React

#javascript #reactjs #event-handling #rotation

#javascript #reactjs #обработка событий #вращение

Вопрос:

Я пытаюсь повернуть элемент после смены телефона на show. F.e при нажатии на Iphone 12 Pro Max (PhoneBox) появится окно с подробной информацией об этом, и я хочу повернуть это поле (DescDetails). Я пытался сделать это в функции rotateBox с помощью gettind e.target.style, но событие не определено, хотя функция работает (я вижу это по console.log(привет)). Итак, мой вопрос, почему событие не определено и как я могу это исправить?

Корпия для стакблитца: https://stackblitz.com/edit/react-epnmz9?file=src/App.js

Код:

 function PhonesSection() {
  const [showPhoneSeries, setShowPhoneSeries] = useState("Apple");
  const [activePhoneSeries, setActivePhoneSeries] = useState("");
  const [showPhoneModel, setShowPhoneModel] = useState();

  const handleShowPhoneSeries = e => {
    let seriesName = e.target.textContent;
    setShowPhoneSeries(seriesName);

  };
  const rotateBox = e => {
    console.log("hello");
    console.log(e);
    // e.target.className.add('rotate');
    // e.target.style.transform = 'rotateY(360deg)';
    // e.target.style.transition = 'all 0.3s ease-in';
  };

  const handleShowPhoneModel = model => {
    setShowPhoneModel(model);
    //rotateBox(model)
  };

  const showBoxes = phones
    .filter(phone => phone.series === showPhoneSeries)
    .map((phone, index) => (
      <PhoneBox key={index} onClick={() => handleShowPhoneModel(phone.model)}>
        <PhoneImage src={phone.img} />

        <PhoneName>{phone.model}</PhoneName>
      </PhoneBox>
    ));

  const showPhoneModelBox = phones
    .filter(phone => phone.model === showPhoneModel)
    .map((phone, index) => (
      <>
        <DescImage src={phone.img} />
        <DescDetails onClick={rotateBox()}>
          <DescPhoneName>{phone.model}</DescPhoneName>
          <Table>
            <Tr>
              <Td>RAM:</Td>
              <Td>{phone.ram}</Td>
            </Tr>

            <Tr>
              <Td>Storage:</Td>
              <Td>{phone.storage}</Td>
            </Tr>
            <Tr>
              <Td>Camera:</Td>
              <Td>{phone.camera}</Td>
            </Tr>
            <Tr>
              <Td>Size:</Td>
              <Td>{phone.size}</Td>
            </Tr>
            <Tr>
              <Td>Battery:</Td>
              <Td>{phone.battery}</Td>
            </Tr>
            <Tr>
              <Td>Price:</Td>
              <Td>{phone.price}</Td>
            </Tr>
          </Table>
          <Button>Go to store</Button>
        </DescDetails>
      </>
    ));
 

Ответ №1:

Итак, мой вопрос, почему событие не определено и как я могу это исправить?

из-за

<DescDetails onClick={rotateBox()}>

это присвоит возвращаемое значение rotateBox (которое не определено, поскольку функция ничего не возвращает) onClick . Таким образом, исправление должно быть таким простым, как

<DescDetails onClick={rotateBox}>

Комментарии:

1. О, какая очевидная ошибка.. Я этого не видел. Спасибо!