Используя эту кнопку.props.history on, нажмите один раз, чтобы перейти на другую страницу ReactJS

#reactjs #react-router

Вопрос:

При запуске этого кода все компилируется, но когда я нажимаю на кнопку «Нажмите на меня», вместо маршрутизации на «formPage.js», он выдает ошибку «Ошибка типа: Не удается прочитать свойство «push» неопределенного». Как я должен решить эту проблему?

Когда я использую «www.google.com» это вместо того, чтобы formPage.js это также приводит меня к той же ошибке.

Есть ли способ решить эту проблему без необходимости преобразовывать весь мой код в функцию для использования useHistory()?

 import axios from 'axios';
import React, { Component } from 'react';

export default class Form extends Component {

    constructor(props) {
        super(props);
        this.state = {
            message: []
        };
        this.handleClick = this.handleClick.bind(this);
    }

    async getData() {
        await axios.get("https://...")
        .then((response) => {
            const convertString = JSON.parse(response.data.body);
            this.setState({message: convertString});
        })
    }

    componentDidMount() {
        this.getData();
    }

    handleClick() {
        this.props.history.push("/formPage.js");
    }

    render() {
        const obj = (this.state.message);
        const datamapping = Object.entries(this.state.message);
        return (
            <div>
                <div className="viewall">
                    <table class="table table-hover">
                        <thead>
                            <th scope="col">Click me</th>
                            <th scope="col">key1</th>
                            <th scope="col">key2</th>
                        </thead>
                        <tbody>
                            {obj.Items?.map((data, key) => {
                                return (
                                    <tr key={key}>
                                        <td>
                                            <button type="button" class="btn btn-primary" onClick={this.handleClick}>
                                                Click me
                                            </button>
                                        </td>
                                        <td>{data.key1}</td>
                                        <td>{data.key2}</td>
                                    </tr>
                                )
                            })}
                        </tbody>
                    </table>
                </div>
            </div>
        );
    }
}
 

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

1. Скорее всего, вам следует обернуть свой компонент withRouter из react-router . Кроме того, вы можете проверить с console.log(this.props) render помощью метода in, чтобы просмотреть все реквизиты компонента.

2. Привет, спасибо! Я проверю это и дам вам знать.

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

4. да, это я знаю. Поэтому мне было интересно, есть ли альтернативный метод для этого