当前位置: 首页 > news >正文

TypeError: Cannot read property 'url' of undefined

引言

使用React-router感觉还是有一定「曲线」的,首先要熟悉ES6且不说,对于JSX扩展语法及React-router有关路由表达稍有马虎都不可以。当出现如题所示错误时,我在网络上搜索,竟然没有找到几处可参考的。倒是有一个如下:

https://teamtreehouse.com/community/typeerror-cannot-read-property-url-of-undefined

的情况与我这里也不一样,后来在stackoverflow.com上直接搜索,也没有找到。不是受到前者的启发,还是终于把问题挖出来,欣喜之余,还是决定把它记录下来。

错误描述

import React, { Component } from 'react';
import {
    Link,
    Route,
} from 'react-router-dom';

const Home=()=>(<div><h1>This is Home</h1></div>)

const Category=({match})=>{
    return(
        <div>
            <ul>
                <li><Link to={`${match.url}/shoes`}>Shoes</Link></li>
                <li><Link to={`${match.url}/boots`}>Boots</Link></li>
                <li><Link to={`${match.url}/footwear`}>Footwear</Link></li>
            </ul>
            <Route
                path={`${match.path}/:name`}
                render={({match})=>(<div><h3>{match.params.name}</h3></div>)}
            />
        </div>
    )

}

const Products=()=>(<div><h2>This is Products</h2></div>)

class App extends Component{
  render(){
    return(
        <div>
            <ul>
              <li><Link to="/">Home</Link></li>

              <li><Link to="/category">Category</Link></li>

              <li><Link to="products">Products</Link></li>
            </ul>
          <hr/>
            <Route exact={true} path="/" component={Home}/>
            <Category/>
            <Route path="/products" component={Products}/>
        </div>
    )
  }
}
export default App;

本例是想测试React-Router客户端嵌套路由相关结论的。上面代码中定义了组件Category,问题出现在临近结尾处的此组件的引用方式。通过WebStorm内置控制台运行npm start时,出现下面语法错误提示:
TypeError: Cannot read property 'url' of undefined

纠错

正如前面所提及的,问题出在临近结尾处的Category组件的引用方式,正确的表达应该是:

                <Route exact={true} path="/" component={Home}/>
                <Route path="/category" component={Category}/>
                <Route path="/products" component={Products}/>

小结

在React-Router的世界里一切皆是组件,可能是受到前段时间使用Semantic-UI for React中表达的影响,以至于犯下上面浮浅错误。其中,在React-Router中<Route>组件嵌套多少层是不要紧的,只要有需要,而且几乎不拘位置。React-Router初学者可以借鉴一下。

相关文章:

  • centos 7 安装官方LAMP(Apache+PHP5+MySQL)
  • 6.Flask-WTForms
  • phpstrom+upupw 开启 Xdebug 调试
  • Python爬虫常用库的安装
  • 非 root 用户全局安装和配置 NodeJS
  • MYSQL性能优化的最佳20+条经验
  • 6.kotlin安卓实践课程-用kotlin写第一个activity对应P层
  • MHA源码分析——环境部署
  • 你需要了解的23种JavaScript设计模式
  • 2018-06-01Linux学习
  • 调查:市面上你知道有哪几款APP支持这个功能?
  • Python将SQL server 数据库导入到mongoDB数据库中
  • 多线程 - wait、notify
  • STP的算法与PVST+实现负载均衡
  • linux用户和权限详解
  • 【译】JS基础算法脚本:字符串结尾
  • 11111111
  • angular2 简述
  • Cookie 在前端中的实践
  • Create React App 使用
  • Docker容器管理
  • eclipse(luna)创建web工程
  • interface和setter,getter
  • javascript 哈希表
  • JS题目及答案整理
  • Lucene解析 - 基本概念
  • node和express搭建代理服务器(源码)
  • PHP变量
  • Spring Boot MyBatis配置多种数据库
  • 对超线程几个不同角度的解释
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 跨域
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 算法-图和图算法
  • 我建了一个叫Hello World的项目
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 正则与JS中的正则
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Android开发者必备:推荐一款助力开发的开源APP
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 函数计算新功能-----支持C#函数
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (九十四)函数和二维数组
  • (力扣题库)跳跃游戏II(c++)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)创业家杂志:UCWEB天使第一步
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)Google Chrome调试JS
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Remoting学习笔记(三)信道
  • .NET 设计模式—简单工厂(Simple Factory Pattern)