React router Ссылка на кнопку условного рендеринга

У меня есть кнопка с щелчком мыши, которая переводит ее в функцию, которая отображает предупреждение с вопросом «вы уверены». Если человек нажимает «ОК» в предупреждении, я бы хотел, чтобы ссылка вела на определенную страницу. Если они нажмут «Отмена», я бы хотел, чтобы он перешел на другую страницу. Вот что у меня есть...

        <Link to = "/calibrateAir" params = {{ moisture: props.moisture }}>
            <MyButton onClick = {() => {calibrateAgain()}}>
                Calibrate Again
            </MyButton>
        </Link>

а функция...

function calibrateAgain() {
    const user = localStorage.getItem('user')
    const alertWindow = window.confirm("Are you sure you want to calibrate?")
    if (alertWindow) {
        axios.post("http://localhost:3001/api/calibrate", 
        {airValue: null, waterValue: null, user: user}).then((response) => {
            alert(response.data)
        }, (error) => {
            console.info(error)
        })
    }
}

По сути, я хочу отобразить «/ калибровать воздух», если для окна предупреждения установлено значение «истина», иначе «/».

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
1 329
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Не используйте компонент ссылки (потому что вложение кнопки внутри тега привязки — это плохое написание html), используйте историю реагирования маршрутизатора, чтобы выполнить то, что вы хотите. Например, если вы используете функциональный компонент, вы можете сделать

import React from "react";
import { useHistory } from "react-router-dom";

 export default function YourComponent() {
  const history = useHistory()

  function calibrateAgain() {
   const user = localStorage.getItem('user')
   const alertWindow = window.confirm("Are you sure you want to calibrate?")
   if (alertWindow) {
    axios.post("http://localhost:3001/api/calibrate", 
    {airValue: null, waterValue: null, user: user}).then((response) => {          
        // Push to the calibrateAir if response succeeds
        history.push("/calibrateAir");
        alert(response.data)
     }, (error) => {
        // Push to the / if response fails
        history.push("/");
        console.info(error)
     })
    } else {
      // Push to the / if user press cancel in the alert
      history.push("/");
    }
  }

  return (
    <MyButton onClick = {calibrateAgain}>
      Calibrate Again
    </MyButton>
 );
 }

Я получаю эту ошибку «useHistory» не определено no-undef

Justin Oberle 21.12.2020 18:23

Вы импортировали это: import {useHistory} from "react-router-dom"; ?

jean182 21.12.2020 18:25

Упс. Я импортировал, но теперь он говорит, что объект не является функцией для строки useHistory

Justin Oberle 21.12.2020 18:29

какую версию реактивного маршрутизатора вы используете?

jean182 21.12.2020 18:30

"реакция-маршрутизатор-дом": "^ 5.2.0"

Justin Oberle 21.12.2020 18:33

Мне жаль. У меня была опечатка в моем импорте. это работает сейчас. Спасибо!

Justin Oberle 21.12.2020 18:35

Почему компонент Link не работает? Была такая же проблема, и она работает без ссылки ... Спасибо, а почему :)?

Robin Aegerter 26.07.2021 11:25

Поскольку вложение кнопки внутри тега a недопустимо для html5, и для требований этого вопроса ссылка не имеет никакого смысла, потому что нам нужно сделать некоторые дополнительные действия, прежде чем мы сможем перенаправить пользователя на другую страницу.

jean182 27.07.2021 16:04

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