Приложение React-Redux: «реквизит» не определен

Я создаю приложение React-Redux. Перед добавлением содержимого выше render() было определено props. Однако после того, как я начал добавлять указанный контент, у приложения начались проблемы с чтением переменной. Я не знаю, что случилось.

Может ли кто-нибудь помочь мне понять, почему props больше не распознается? Я был бы очень признателен.

Логин.js

import React from 'react';
import Modal from 'react-bootstrap/Modal';
import Form from 'react-bootstrap/Form';
import Button from 'react-bootstrap/Button';
import './login.css';

class LoginForm extends React.Component { 
  constructor(props) {
    super(props);
    this.state = {
      username: ''
    }

    this.onChange = this.onChange.bind(this);
  }

  onChange(e) {
    this.setState({ [e.target.name]: e.target.value});
  }

render() {
    return (
        <>
          <Modal show = {props.modalOpen} onHide = {props.handleModalOpen}>
            <Modal.Header closeButton>
              <Modal.Title>Login</Modal.Title>
            </Modal.Header>
          <Modal.Body>
              <Form>
                <Form.Group>
                  <Form.Label>Username</Form.Label>
                  <Form.Control 
                    type = "text"
                    name = "username"
                    className = "form-control"
                  />
                </Form.Group>

                <Form.Group>
                  <Form.Label>Password</Form.Label>
                  <Form.Control 
                    type = "text"
                    name = "password"
                    className = "form-control"
                  />
                </Form.Group>
              </Form>
            </Modal.Body>
            <Modal.Footer>
              <Button variant = "danger" type = "submit" onClick = {props.handleModalOpen}>
                Submit
              </Button>
              <Button variant = "primary" onClick = {props.handleClose}>
                Cancel
              </Button>
            </Modal.Footer>  
          </Modal>
        </>
     );
  }
}

export default LoginForm;

Navbar.js

import React from "react";
import { Link } from 'react-router-dom';
import './navbar.css';
import LoginForm from '../LoginForm/login.js';
// import SignUpModal from '../SignUpModal/signup.js';


class Navbar extends React.Component {
  state = {
     modalOpen: false
  }

  handleModalOpen = () => {
     this.setState((prevState) => {
        return {
           modalOpen: !prevState.modalOpen
        }
     })
  }

  render() {
    return (
      <div>
        <nav className = "navbar navbar-expand-sm navbar-dark px-sm-5">
            <div className = "container">
                <Link to='/'>
                    <div className = "navbar-brand">
                        <i class = "fas fa-globe fa-2x"></i>
                    </div>
                </Link>

                <ul className = "navbar-nav align-items-right">
                    <li className = "nav-item ml-5">
                        <a onClick = {this.handleModalOpen} className = "nav-link">
                            Login
                        </a>
                    </li>
                    <li className = "nav-item ml-5">
                        <a onClick = {this.handleModalOpen} className = "nav-link">
                            Sign Up
                        </a>
                    </li>
                </ul>
            </div>
        </nav>
        <LoginForm
           modalOpen = {this.state.modalOpen}
           handleModalOpen = {this.handleModalOpen}
        />
        {/* <SignUpModal
           modalOpen = {this.state.modalOpen}
           handleModalOpen = {this.handleModalOpen}
        /> */}
      </div>
    )
  }
}

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

Ответы 1

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

В вашем Login.js он написан с использованием синтаксиса на основе классов, поэтому он должен быть this.props вместо props

<Modal show = {this.props.modalOpen} onHide = {this.props.handleModalOpen}>

Кроме того, Login.js можно переписать в functional-based component, затем вы можете использовать props, как показано ниже.


const Login = props => {
  return (
    <Modal show = {props.modalOpen} onHide = {props.handleModalOpen} />
  )
}

Просто чтобы было понятно, в конструкторе это параметр props, так что все в порядке. В любом другом месте в классе этот ответ правильный!

Emile Bergeron 10.07.2019 03:21

@Isaac Вау, не могу поверить, что пропустил это. Большое спасибо!

GalaXee95 10.07.2019 03:21

@EmileBergeron: поэтому я предоставил точную строку с Modal, которая выдает ошибку, вместе с другим примером для функционального компонента.

Isaac 10.07.2019 03:22

@ GalaXee95: Рад помочь, отметьте это как ответ, если он правильно отвечает на ваш вопрос :)

Isaac 10.07.2019 03:23

Да, как я уже сказал, вы правы (тоже проголосовали) ;) Теперь также есть хуки, если вы хотите, чтобы функциональный компонент имел состояние.

Emile Bergeron 10.07.2019 03:24

@EmileBergeron: О да, Хуки, конечно! Мне так 2018, ха-ха, позвольте мне обновить свой ответ

Isaac 10.07.2019 03:25

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