推荐使用facebook官方构建工具create-react-app来创建React基础工程。(然而我还是手动构建)

(路由)官方旧版本和V4的比较。https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/migrating.md

欢迎补充!

正文:(react-router的版本是V4)


提示No repository field 警告

解决办法:

1、在package.json中添加 "private": true 即可。

或者

2、在package.json中添加 repository 即可。如下。

"repository" : {
  "type" : "git",
  "url" : "https://github.com/npm/npm.git"
}

webpack的配置中,postcss报错的问题:也可以看官方文档

解决办法:

1. 在webpack.config.js中使用 postcss-loader

module.exports = {
  module: {
   rules: [{
      test: /\.css$/,
      exclude: /node_modules/,
      use: [
        {
          loader: 'style-loader'
        },
        {
          loader: 'css-loader',
          options: { importLoaders: 1, }
        },
        {
          loader: 'postcss-loader'
        }
      ]
    }]
  }
}

2. 然后 新建 postcss.config.js 文件

module.exports = {
  plugins: [
    require('precss'),
    require('autoprefixer')
   ]
}

try,catch,finally 中 return 的问题。(这个不算React的问题。逃。)

http://blog.csdn.net/kavensu/article/details/8067850


编译不了React的问题。

webpack.config.js中判断js后缀的模块中添加:

query: {
  presets: ['react']
}

或者

新建.babelrc文件夹

{
  "presets": ["react"]
}

旧版的Router已经更新为HashRouter。

// 原来写法:

import { Router } from 'react-router';

// 更新写法:

import { HashRouter } from 'react-router-dom';

Router里面只能有一个子元素。

可以使用<div></div>元素包住各个<Route/>


IndexRoute。的写法。

和路由嵌套。的写法。

原来的写法:

<Router history={hashHistory}>

  <Route path='/' component={App}>

    <IndexRoute component={Home}/>

    <Route path='/city' component={City}/>

  </Route>

</Router>

更新为:

<Router history={hashHistory}>

  <Route path="/" component={(props) => (

    <App {...props}>

      <Switch>

        <Route exact path='/' component={Home} />

        <Route path='/city' component={City}/>

      </Switch>

    </App>

  )}/>

</Router>

补充:Switch。

在访问地址和路由的配置一样时,只渲染第一个匹配的路由。

如这样的配置:

<Route path="/about" component={ About } />

<Route path="/:keyword" component={ Keyword } />

补充:jsx-spread({...props},设置对象的键值对作为JSX的属性)

https://facebook.github.io/react/docs/jsx-in-depth.html#spread-attributes


hashHistory的写法。

// 原来的写法:

import { hashHistory } from 'react-router'

// 更新写法:

import createBrowserHistory from 'history/createBrowserHistory'

const hashHistory = createBrowserHistory()

路由参数 (路由规则)的问题。

// 原来写法:
<Route path='/search/:category(/:keyword)' component={Search}/> // 但是,这样写无论是一个参数或是两个参数,都会匹配到404页面(前提写了404页面,没有写404页面则显示空白)。 // 分开写就没问题。 // 只写这句都能匹配,但是拿不到第二个参数的值
<Route path='/search/:category' component={Search}/> // 只写这句只能匹配两个参数都有的路由,只有一个参数的路由匹配不了
<Route path='/search/:category/:keyword' component={Search}/>

Link

// 原来写法:

import { Link } from 'react-router';

// 更新写法:

import { Link } from 'react-router-dom';

获取路由参数。

// 原来写法:

this.props.params.xx

// 更新写法:

this.props.match.params.xx

如:<Route path='/search/:category' component={Search}/>,

那么 this.props.match.params.category 即可拿到 category 的值。

又如:<Route path='/search/:category/:keyword' component={Search}/>

那么 this.props.match.params.category即可拿到 category的值。

this.props.match.params.keyword可以拿到 keyword 的值。


路由跳转。

// 忽略这种写法

// hashHistory.push('/')

// 路由变化成http://localhost:8000/,但是页面没有更新。

// 在这句后面添加以下这句即可。然后路由就变成http://localhost:8000/#/

// location.href = location.href;

或者

history是路由配置好的。(如果子组件中获取不了history,可以给子组件传参。)

this.props.history.push('/')
this.props.history.push('/search')

参数编码的问题。求解释。

this.props.history.push('/search/all/' + encodeURIComponent(value))

// 跳转后,地址栏上是未编码的文字。
// 在跳转前,打印出来的的确是编码了的文字。
// 将这个编码了的文字作为参数跳转路由
// 比如火锅 this.props.history.push('/search/all/' + '%E7%81%AB%E9%94%85') // 跳转后,地址栏上也是未编码的文字。

JSX 语法。必须是驼峰命名(属性,事件,样式等等),以及属性名不能和 JS 关键字冲突,例如:className,readOnly,defaultValue等等。

例如:onClick,onKeyUp。

class属性改成className,因为class是关键字,不能使用。

input 的value属性要改成 defaultValue


标签必须是闭合标签。<biaoqian></biaoqian>或者<biaoqian/>


在循环的时候需要添加key={...}来表示该元素是不重复的。


return的内容至少是一个元素,如<div></div>。


props 属性,由父组件传入,永远是只读的,建议不要修改。

React是单向数据绑定。

主要用于数据的展示、父子组件的数据传递。


创建的组件名称首字母必须大写。


组件的style属性,要写成style={{width: '100px'}}。

或者

.... style={obj} ...
let obj={
  width: '100px';
}

js的内容写在{}内。

{
  /* 判断 */
  this.state.something
  ? <div></div>
  : <div></div>
}

react项目中遇到的一些问题的更多相关文章

  1. 如何在非 React 项目中使用 Redux

    本文作者:胡子大哈 原文链接:https://scriptoj.com/topic/178/如何在非-react-项目中使用-redux 转载请注明出处,保留原文链接和作者信息. 目录 1.前言 2. ...

  2. 如何优雅地在React项目中使用Redux

    前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...

  3. react项目中实现元素的拖动和缩放实例

    在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...

  4. React项目中实现右键自定义菜单

    最近在react项目中需要实现一个,右键自定义菜单功能.找了找发现纯react项目里没有什么工具可以实现这样的功能,所以在网上搜了搜相关资料.下面我会附上完整的组件代码. (注:以下代码非本人原创,具 ...

  5. React项目中使用Mobx状态管理(二)

    并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScrip ...

  6. 在react项目中使用ECharts

    这里我们要在自己搭建的react项目中使用ECharts,我们可以在ECharts官网上看到有一种方式是在 webpack 中使用 ECharts,我们需要的就是这种方法. 我们在使用ECharts之 ...

  7. 优雅的在React项目中使用Redux

    概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...

  8. 深入浅出TypeScript(5)- 在React项目中使用TypeScript

    前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...

  9. redux在react项目中的应用

    今天想跟大家分享一下redux在react项目中的简单使用 1 1.redux使用相关的安装 yarn add redux yarn add react-redux(连接react和redux) 2. ...

  10. react项目中引入了redux后js控制路由跳转方案

    如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...

随机推荐

  1. ARC072E Alice in linear land

    ---题面--- 题解: 首先我们要观察到一个性质,因为在固定的起始距离下,经过固定的操作,最后所在的位置是固定的,我们设经过操作1 ~ i之后所在的地方距离终点为d[i]. 那么如果女巫可以修改第i ...

  2. POJ3621:Sightseeing Cows——题解

    http://poj.org/problem?id=3621 全文翻译参自洛谷:https://www.luogu.org/problemnew/show/P2868 题目大意:一个有向图,每个点都有 ...

  3. BZOJ5217:[Lydsy2017省队十连测]航海舰队——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5217 Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格 ...

  4. application.properties 改成 application.yml

    application.properties 改成 application.yml

  5. PC蓝牙通信C#代码实现

    PC蓝牙通信C#代码实现 这篇文章主要为大家详细介绍了PC蓝牙通信C#代码实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了C#实现PC蓝牙通信代码,供大家参考,具体内容如下 ...

  6. iOS-查询数据库-->指定数据表中的当前数据行的总数量

    很多时候,我们在查询一个表的时候,不想得到里面的记录内容,只是想简单的得到符合查询条件的记录条数. FMDB中有一个很简单的方法就可以实现,见下面的代码实例: #import "FMdata ...

  7. 洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)

    P3178 [HAOI2015]树上操作 题目链接:https://www.luogu.org/problemnew/show/P3178 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边 ...

  8. HDU1384 差分约束

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. 疯狂java学习笔记

    面向对象: 从现实世界中客观存在的事物(对象)出发构造软件系统,并在软件系统构造中运用人类的自然思维方式,强调直接以现实世界中的事物为中心来思考,认识问题,并根据这些事务的本质特点,将他们抽象为系统中 ...

  10. [freemarker篇]02.生成HTML的静态页面

    昨天完成了一部分的今天在上次的基础上,完成完成生成HTML静态页面的操作,中间会涉及一点标签的简单使用.今天的代码有一丢丢的对付的感觉!抱歉了,直接就上代码吧!求原谅! 项目结构目录如下: 第一步,新 ...