Как вызвать Reactjs onClick внутри рендеринга вместо возврата?

Как я могу назначить функцию onClick, если я решу выполнить условный рендеринг вне возврата React?

Stackoverflow хочет, чтобы я добавил еще больше описания, чем то, которое я предоставил, но я потратил 1 час на написание кода в их редакторе без помощи синтаксиса или eslint: D

section:hover {
  cursor: pointer;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id = "root"/>

<script type = "text/babel">

const RotateOnClick = ( {rotated, handleChangeEvent} ) => {
  if (rotated) {
    return <section onClick = {handleChangeEvent}>I'M ROTATED! Click me to rotate again!</section>
  } else {
    return <section onClick = {handleChangeEvent}>I'm not rotated. Click me to rotate!</section>  
  }
}

class Rotator extends React.Component {

  // Change state to true to see that it renders if toggled
  state = {
    isRotated: false
  }
  
  toggleRotation = () => {
    // Outdated initial code when asking the question
    // console.info("React doesn't like me. It will never call me :( ")

    console.info("Yei, it works! React likes me again")
    const { isRotated } = this.state
    this.setState( {isRotated: !isRotated })
  }
    
  render() {
    const { isRotated } = this.state
    
    let conditionalRender;    
    if (isRotated) {
      conditionalRender = <RotateOnClick rotated handleChangeEvent = {this.toggleRotation} />
    } else {
      conditionalRender = <RotateOnClick handleChangeEvent = {this.toggleRotation} />
    }
  
    return (
    <div className = "hover">
      {conditionalRender}
    </div>
    );
  }
}

ReactDOM.render(
    <Rotator />,
    document.getElementById('root')
);
</script>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

<RotateOnClick rotated onClick = {this.toggleRotation} />

не означает, что компонент будет реагировать на событие клика. Вы не можете назначать обработчики событий компонентам!

Вы должны передать обработчик компоненту, например.

<RotateOnClick rotated clickHandler = {this.toggleRotation} />

и используйте эту опору в рендере:

const RotateOnClick = ( {rotated, clickHandler} ) => {
  if (rotated) {
    return <section onClick = {clickHandler}>I'M ROTATED! Click me to rotate again!</section>
  } else {
    return <section onClick = {clickHandler}>I'm not rotated. Click me to rotate!</section>  
  }
}

Таким образом, реакция должна снова быть приятной;)

Другие вопросы по теме

Похожие вопросы

Как удалить повторяющиеся значения из массива с помощью реакции?
Получил ошибку при тестировании redux-saga с функциями задержки с помощью библиотеки Redux Saga Test Plan
Как использовать модель в одном корне в reactjs?
Как исправить поисковый фильтр React, который не обновляется при возврате
Реагировать - event.target возвращает innerText ранее щелкнутого элемента вместо текущего щелкнутого элемента
Реагировать на проблему с параметрами маршрутизатора dom
Как вызвать обратный вызов, предоставленный свойством рендеринга, из его родительского компонента, используя хуки между рендерингами
Неверный вызов ловушки. Хуки можно вызывать только внутри тела функционального компонента при применении стиля к базовому компоненту класса с помощью material-ui
Автоматически изменять размер выпадающего списка css, чтобы он соответствовал самому большому элементу
Firebase intellisense/автодополнение в проекте JavaScript React в VSCode