Реагировать на предупреждение computedMatch относительно некоторых проблем?

У меня есть реквизиты с именем isAuthenticated, и это также показывает, что в моей консоли сохраняется какое-то предупреждение. Пожалуйста, проверь это.

import React,{Component} from "react";
import {BrowserRouter as Router, Switch, Route} from "react-router-dom";
import LogoutHome from './Logout_Home';
import SignIn from '../Components/SignIn';
import jwt_decode from 'jwt-decode';
import {setCurrentUser} from '../actions/authActions';
import SignUp from '../Components/SignUp';
import setAuthToken from '../util/setAuthToken';
import AboutUs from '../containers/AboutUs';
import store from '../store';
import {connect} from "react-redux";
// check for TOKEN
if (localStorage.jwtToken) {
  // Set auth token header auth
  setAuthToken(localStorage.jwtToken);
  // Decode token and get user info and exp
  const decoded = jwt_decode(localStorage.jwtToken);
  // Set user and isAuthenticated
  store.dispatch(setCurrentUser(decoded));

  // Check for expired token
  const currentTime = Date.now() / 1000;
  if (decoded.exp < currentTime) {
    // Logout user
    store.dispatch(logoutUser());

    // Redirect to login
    window.location.href = '/login';
  }
}
class HomePage extends Component
{
  componentDidMount(){
    console.info(this.props.auth.isAuthenticated);
  }
    render(){
      var {
        isAuthenticated
      } = this.props.auth;
      return(
        <div>
          <Router>
            <div>
              <Switch>
                {this.props.auth.isAuthenticated===false ? (
                  <div>
                  <Route exact path='/' component = {LogoutHome}/>
                  <Route  path='/Finance/Login' component = {SignIn}/>
                  <Route  path='/Finance/AboutUs' component = {AboutUs}/>
                  <Route  path='/Finance/ContactUs' component = {ContactUs}/>
                  <Route  path='/Finance/SignUp' component = {SignUp}/>
                  <Route  path='/Finance/Forgotpassword' component = {Forgotpassword}/>
                  </div>
                  ) : (
                    <div>
                  <Route  path='/Finance/Home' component = {Home}/>
                  </div>
                  )}
              </Switch>
            </div>
          </Router>
        </div>
      );
    }
}
function mapStateToProps(state){
  return{
    auth : state.auth
  };
}
export default connect(mapStateToProps)(HomePage);

И предупреждение примерно такое:

index.js:2178 Warning: React does not recognize the `computedMatch` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `computedmatch` instead. If you accidentally passed it from a parent component, remove it from the DOM element.
    in div (at Homepage.js:50)
    in Switch (at Homepage.js:48)
    in div (at Homepage.js:47)
    in Router (created by BrowserRouter)
    in BrowserRouter (at Homepage.js:46)
    in div (at Homepage.js:45)
    in HomePage (created by Connect(HomePage))
    in Connect(HomePage) (at App.js:10)
    in div (at App.js:9)
    in App (at index.js:10)
    in Provider (at index.js:9)

Я не понимаю, погода это проблема или что, потому что я читал это во многих местах, но получаю разные ответы. Выше вставлен только компонент домашней страницы.

показать компонент Homepage.

Arup Rakshit 22.08.2018 18:38

Выше размещен только компонент HomePage. Пожалуйста, проверьте обновленный вопрос.

yash Choksi 22.08.2018 18:43

Хорошо .. Прочтите это блог. У него есть ответ для вас .. :) Эти <div> являются виновниками внутри <Switch>, используйте Fragment для решения проблемы.

Arup Rakshit 22.08.2018 18:49

Нет необходимости в <div> над Switch. Также внутри Switch.

Ravi Theja 22.08.2018 18:51

@RaviTeja ему там что-то нужно, но не <div> или какой-нибудь html-дом .. Но <> или <Fragement> решат эту проблему.

Arup Rakshit 22.08.2018 18:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
5
19 951
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Из React док

The unknown-prop warning will fire if you attempt to render a DOM element with a prop that is not recognized by React as a legal DOM attribute/property. You should ensure that your DOM elements do not have spurious props floating around.

Внутри компонента <Switch> вы увидите строку ниже.

React.cloneElement(child, { location, computedMatch: match })

В этом случае child - это ваш <div></div>, поэтому нестандартные реквизиты computedMatch передаются на собственный внутренний узел <div>, поэтому React выдает вам здоровое предупреждение. Таким образом, использование <> или <Fragment> сбросит предупреждение.

Не могли бы вы подробнее объяснить свой обходной путь?

bob 03.07.2019 17:00

Я решаю эту проблему с тегом Удалить<div> внутри тега. или заменять<div> с <React.Fragment>.

в таком случае :

import React,{Component} from "react";
import {BrowserRouter as Router, Switch, Route} from "react-router-dom";
import LogoutHome from './Logout_Home';
import SignIn from '../Components/SignIn';
import jwt_decode from 'jwt-decode';
import {setCurrentUser} from '../actions/authActions';
import SignUp from '../Components/SignUp';
import setAuthToken from '../util/setAuthToken';
import AboutUs from '../containers/AboutUs';
import store from '../store';
import {connect} from "react-redux";
// check for TOKEN
if (localStorage.jwtToken) {
  // Set auth token header auth
  setAuthToken(localStorage.jwtToken);
  // Decode token and get user info and exp
  const decoded = jwt_decode(localStorage.jwtToken);
  // Set user and isAuthenticated
  store.dispatch(setCurrentUser(decoded));

  // Check for expired token
  const currentTime = Date.now() / 1000;
  if (decoded.exp < currentTime) {
    // Logout user
    store.dispatch(logoutUser());

    // Redirect to login
    window.location.href = '/login';
  }
}
class HomePage extends Component
{
  componentDidMount(){
    console.info(this.props.auth.isAuthenticated);
  }
    render(){
      var {
        isAuthenticated
      } = this.props.auth;
      return(
        <div>
          <Router>
            <div>
              <Switch>
                {this.props.auth.isAuthenticated===false ? (
                  <React.Fragment>
                  <Route exact path='/' component = {LogoutHome}/>
                  <Route  path='/Finance/Login' component = {SignIn}/>
                  <Route  path='/Finance/AboutUs' component = {AboutUs}/>
                  <Route  path='/Finance/ContactUs' component = {ContactUs}/>
                  <Route  path='/Finance/SignUp' component = {SignUp}/>
                  <Route  path='/Finance/Forgotpassword' component = {Forgotpassword}/>
                  </React.Fragment>
                  ) : (
                    <React.Fragment>
                  <Route  path='/Finance/Home' component = {Home}/>
                  </React.Fragment>
                  )}
              </Switch>
            </div>
          </Router>
        </div>
      );
    }
}
function mapStateToProps(state){
  return{
    auth : state.auth
  };
}
export default connect(mapStateToProps)(HomePage);

Как говорили другие, проблема возникает из-за наличия <div> непосредственно внутри элемента <Switch>. Из документация для <Switch>:

All children of a <Switch> should be <Route> or <Redirect> elements.

Таким образом, хотя вы, по-видимому, можете избавиться от этой ошибки, заключив свой элемент в тег фрагмента, он больше соответствует предполагаемому использованию, чтобы вместо этого обернуть его в элемент <Route>.

<Route> без реквизита должен обеспечивать предполагаемое поведение.

Решение простое, просто добавьте еще один слой <React.Fragment> после <Switch>. Надеюсь, поможет.

У меня была эта проблема с react-router-dom, потому что я поместил div в свой Switch. Вместо этого я переместил свой div за пределы моего Switch, и ошибка исчезла.

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