react项目中遇到的一些问题
推荐使用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项目中遇到的一些问题的更多相关文章
- 如何在非 React 项目中使用 Redux
本文作者:胡子大哈 原文链接:https://scriptoj.com/topic/178/如何在非-react-项目中使用-redux 转载请注明出处,保留原文链接和作者信息. 目录 1.前言 2. ...
- 如何优雅地在React项目中使用Redux
前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...
- react项目中实现元素的拖动和缩放实例
在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...
- React项目中实现右键自定义菜单
最近在react项目中需要实现一个,右键自定义菜单功能.找了找发现纯react项目里没有什么工具可以实现这样的功能,所以在网上搜了搜相关资料.下面我会附上完整的组件代码. (注:以下代码非本人原创,具 ...
- React项目中使用Mobx状态管理(二)
并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScrip ...
- 在react项目中使用ECharts
这里我们要在自己搭建的react项目中使用ECharts,我们可以在ECharts官网上看到有一种方式是在 webpack 中使用 ECharts,我们需要的就是这种方法. 我们在使用ECharts之 ...
- 优雅的在React项目中使用Redux
概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...
- 深入浅出TypeScript(5)- 在React项目中使用TypeScript
前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...
- redux在react项目中的应用
今天想跟大家分享一下redux在react项目中的简单使用 1 1.redux使用相关的安装 yarn add redux yarn add react-redux(连接react和redux) 2. ...
- react项目中引入了redux后js控制路由跳转方案
如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...
随机推荐
- Python使用requests模块下载图片
MySQL中事先保存好爬取到的图片链接地址. 然后使用多线程把图片下载到本地. # coding: utf-8 import MySQLdb import requests import os imp ...
- 51nod 1286 三段子串(树状数组+拓展kmp)
题意: 给定一个字符串S,找到另外一个字符串T,T既是S的前缀,也是S的后缀,并且在中间某个地方也出现一次,并且这三次出现不重合.求T最长的长度. 例如:S = "abababababa&q ...
- [NOIP2012]疫情控制 贪心 二分
题面:[NOIP2012]疫情控制 题解: 大体思路很好想,但是有个细节很难想QAQ 首先要求最大时间最小,这种一般都是二分,于是我们二分一个时间,得到一个log. 然后发现一个军队,越往上走肯定可以 ...
- HDOJ.2955 Robberies (01背包+概率问题)
Robberies 算法学习-–动态规划初探 题意分析 有一个小偷去抢劫银行,给出来银行的个数n,和一个概率p为能够逃跑的临界概率,接下来有n行分别是这个银行所有拥有的钱数mi和抢劫后被抓的概率pi, ...
- Spring.NET中事务管理【转】
http://www.cnblogs.com/GoodHelper/archive/2009/11/16/springnet_transaction.html 浏览了下写的比较清楚. 在.NET FC ...
- JavaScript随机数生成方法
实现随机数是各种编程语言都很常见的一个编程任务,下面介绍一下在JavaScript如何实现随机数.第一中方法通过重写Math.random方法实现,第二种方法改自一个C实现,都可以实现编程目的. 直接 ...
- caffe中的Accuracy+softmaxWithLoss
转:http://blog.csdn.net/tina_ttl/article/details/51556984 今天才偶然发现,caffe在计算Accuravy时,利用的是最后一个全链接层的输出(不 ...
- udhcp server端源码分析1--文件组织结构
1:dhcpd.c udhcpd_main函数是整个程序的入口,依次完成的主要工作有读取配置文件信息至全局结构体.记录程序pid number.初始化lease链表.将程序作为daemon运行.死循环 ...
- bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 93 Solved: 53[Submit][Status][ ...
- Moodle通过CLI安装
Moodle通过CLI安装 前提:Moodle准备工作已经完成 1) 数据库(及用户) 2) moodledata目录 3) 源代码及站点配置 安装过程 打开终端,或通过Putty或Xshell等软件 ...