Вызовите функциональный компонент при нажатии кнопки в ответ

У меня есть функциональный компонент, внутри которого у меня есть кнопка. Я хочу вызвать функциональный компонент при нажатии этой кнопки.

Когда мы нажимаем кнопку «Отправить», появляется кнопка «Предварительный просмотр», а когда пользователь нажимает кнопку предварительного просмотра, вызывается функциональный компонент «Предварительный просмотр».

const Form =(props)=>{

handlePreview=(e)=>{
    e.preventDefault();

    return <Preview/>
  }

return(
<input name = "email" type = "text"/>
<button type = "submit" onClick = {props.handleSubmit}>Submit</button><br/>
  {props.render&& 
   <button type = "submit" onClick = {handlePreview}>Preview</button>
  }

)
}

Когда я нажимаю кнопку «Отправить», появляется кнопка «Просмотр», но когда я нажимаю кнопку «Просмотр», она не переходит к функциональному компоненту <Preview>.

Вы должны включить свой компонент Preview в Form, если хотите отображать их условно и управлять через state

Isaac 10.07.2019 03:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
9 995
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы отрендерить компонент, вы должны вернуть его из функции Form. Если вы вернете какой-либо компонент из обработчика событий, он будет проигнорирован.

Итак, чтобы показать компонент <Preview/>, вы должны создать локальное состояние. В функциональных компонентах это можно сделать с помощью Реагировать на хуки, как показано ниже.

const Form =(props)=>{
    const [isPreviewShown, setPreviewShown] = useState(false);

    handlePreview=(e)=>{
        e.preventDefault();

        setPreviewShown(true); // Here we change state
    }

    return(
        <input name = "email" type = "text"/>
        <button type = "submit" onClick = {props.handleSubmit}>Submit</button><br/>
        {props.render&& 
            <button type = "submit" onClick = {handlePreview}>Preview</button>
        }
        {isPreviewShown && <Preview/>}

    )
}

Прежде чем делиться ответами в hooks, я предлагаю уточнить версию ReactJS, которую использует OP, потому что многие проекты ReactJS все еще не поддерживают hooks, на случай, если OP задастся вопросом, почему ваш ответ не работает. (кстати, я проголосовал за)

Isaac 10.07.2019 03:39

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