react路由传参(组件之间传值)
_
通过
query
React路由传参的三种方式
:
二、
通过
query
(以
GoodsList
.js
为例
)
解释:组件之间传递参数时,一般都是键值对的方式,如:username=tianwater。
Q
uery的方式不用
配置路由表。
只改
Link(Navlink)标签处就行
1、传值(需要修改两个地方):
1)、 Link(NavLink)处 (键值对全在此处写)
给Link标签的to属性赋的值是个location对象。
L
ocation对象包括pathname属性和query属性。
<Link to=
{
{pathname:'/gla/Pencil',query:{id:'01009'}}}
>铅笔</Link>
<Link to=
{
{pathname:'/gla/Eraser',query:{name:'橡皮01'}}}
>橡皮01</Link>
2、获取值:
1)、在“Pencil.js”里
商品编号:{this.props.location.query.id}<br/>
2)、在“Eraser.js”里
商品名称:{this.props.location.query.name}<br/>
PS:经过以上的更改后,文件“GoodsList.js”,“Pencil.js”,“Eraser.js”的代码分别为(可以复制以下代码):
1)、GoodsList.js文件:
import React, { Component } from 'react';
import { BrowserRouter, Route,NavLink} from 'react-router-dom';
import Pencil from './Pencil';
import Eraser from './Eraser';
class GoodsList extends Component{
render(){
return (
<BrowserRouter>
<div>欢迎来到商品列表页面</div><br/>
<Link to=
{
{pathname:'/gla/Pencil',query:{id:'01009'}}}
>铅笔</Link>
<Link to=
{
{pathname:'/gla/Eraser',query:{name:'橡皮01'}}}
>橡皮01</Link>
<Route path='/gla/Pencil' component={Pencil} />
<Route path='/gla/Eraser' component={Eraser} />
</BrowserRouter>
export default GoodsList;
2)、Pencil.js文件:
import React,{Component} from 'react';
class Pencil extends Component{
render(){
return (
商品编号:{
this.props.location.query.id
}<br/>
商品名称:铅笔<br/>
商品描述:铅笔好,铅笔好,铅笔写错还可以擦掉<br/>
export default Pencil;
3)、Eraser.js文件:
import React, { Component } from 'react';
class Eraser extends Component{
render(){
return (
商品编号:01002<br/>
商品名称:{
this.props.location.query.name
}<br/>
商品描述:橡皮好,橡皮好,橡皮可以擦掉铅笔写<br/>
export default Eraser;
ok,第二种方式大功告成!
下一篇是
第三种方式:state
此篇文章是基于react路由系列01___ 在react脚手架里使用React-router(简单入门)和react路由系列02___ 二级路由上写的,如果你有路由基础,可以直接看这篇文章,如果没有路由基础,则建议先看前两篇文章。react路由传参(组件之间传值)_通过queryReact路由传参的三种方式:二、通过query(以GoodsList.js为例)解释:组件之间传...
react-router-dom
v。^ 4.0.0或^ 5.0.0
import with
Query
Params from '
react-router
-
query
-params' ;
const ExampleComponent = ( {
query
Params ,
set
Query
Params ,
} ) = (
query
Params: { JSON . stringify (
query
Params ) }
< / div >
<Route path='/path/:name' component={Path}/>
<link to="/path/2">xxx</Link>
this.props.history.push({pathname:"/path/" + name});
读取参数用:this.props.match.params.name
优势 : 刷新地址栏,参数依然存在
缺点:只能传字符串,并且,如果传的值太多的话,url会变得长而丑陋。
2.
query
Route定义方式:<Route path='/About/:id' component={About} />
Link组件:<Link to="/path/通过通配符传参">About</Link>
参数获取:this.props.location.
query
优点:简单快捷,并且,在刷新页面的时候,参数不会丢失。
缺点:只能传字符串,...
使用查询字符串解析的
React
Router
钩子
通过useHistory 库来useLocation基本的钩子( useLocation和useHistory )的小程序包,使它们更加了解 。
首先,它导出一个简单的use
Query
Params钩子,以读取和操作URL查询字符串(对于在URL中编码有排序顺序或页码的UI有用)。 有关更多详细信息,请参见使用说明。
query
-string
对等依赖
react-router-dom
@^5.1或更高版本(需要
路由
器挂钩)
该软件包也是用ES6编写的,因此要使用它,您需要一些编译器,例如babel才能在node_modules上运行。
$ npm install
react-router
-
query
-hooks
react-router-dom
$ yarn add
react-router
-
query
-
vue里面有两个属性this.$
router
和this.$route。this.$
router
为全局
路由
对象,this.$route是当前
路由
对象。
vue
路由
传参有三种方法,动态
路由
传参,
query
路由
传参,params
路由
传参,每种
路由
传参需要在
路由
文件里配置好
路由
//动态
路由
传参
path: "/dongtaoluyou/:id",
component: dongtaichuancan,
name: "dongtaoluyou"
React
Query
通常被描述为
React
缺少的数据获取(data-fetching)库,但是从更广泛的角度来看,它使
React
程序中的获取,缓存,同步和更新服务器状态变得轻而易举。
查询 Queries
查询是一种对于与 唯一键值 相关联的异步数据源的声明性依赖。查询可以与任何基于Promise的方法(包括GET和POST方法)一起使用,以从服务器获取数据。如果您的方法修改了服务器上的数据,建议改用 Mutations要在你的组件或自定义 Hook 中订阅一个查询,至少需要以
本文主要介绍
React
Router
定义
路由
之后如何
传值
,有关
React
和
React
Router
的基础请参考阮老师的博客注:本文示例
React
Router
版本为:3.0.2,使用前请注意检查版本一.props.params官方例子使用
React
router
定义
路由
时,我们可以给<Route>指定一个path,然后指定通配符可以携带参数到指定的path:
首先定义
路由
到UserPage页面
React
Native中实现侧滑菜单可以使用第三方组件库,如
react
-native-drawer、
react
-native-side-menu等,也可以自己手写实现。以下是手写实现的简单示例:
1. 安装
react
-native-gesture-handler库
```bash
npm install
react
-native-gesture-handler
2. 在App.js中引入GestureHandlerRootView,并在render方法中添加侧滑菜单和主页布局
```javascript
import { GestureHandlerRootView } from '
react
-native-gesture-handler';
class App extends Component {
constructor(props) {
super(props);
this.state = {
isMenuOpen: false,
render() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<View style={{ flex: 1 }}>
{this.state.isMenuOpen ?
<View style={{ flex: 1, backgroundColor: 'white' }}>
<Text>侧滑菜单</Text>
</View> :
<View style={{ flex: 1, backgroundColor: 'white' }}>
<Text>主页布局</Text>
</View>
</View>
</GestureHandlerRootView>
3. 添加手势识别和动画
```javascript
import { PanGestureHandler, State } from '
react
-native-gesture-handler';
class App extends Component {
constructor(props) {
super(props);
this.state = {
isMenuOpen: false,
gestureState: State.UNDETERMINED,
translateX: new Animated.Value(0),
this.onGestureEvent = Animated.event(
[{ nativeEvent: { translationX: this.state.translateX } }],
{ useNativeDriver: true }
onHandlerStateChange = event => {
if (event.nativeEvent.oldState === State.ACTIVE) {
const { translationX } = event.nativeEvent;
if (translationX < -50) {
this.setState({ isMenuOpen: true });
Animated.spring(this.state.translateX, {
toValue: -200,
useNativeDriver: true,
}).start();
} else {
Animated.spring(this.state.translateX, {
toValue: 0,
useNativeDriver: true,
}).start();
render() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<View style={{ flex: 1 }}>
<PanGestureHandler
onGestureEvent={this.onGestureEvent}
onHandlerStateChange={this.onHandlerStateChange}
<Animated.View
style={{
flex: 1,
transform: [{ translateX: this.state.translateX }],
{this.state.isMenuOpen ?
<View style={{ flex: 1, backgroundColor: 'white' }}>
<Text>侧滑菜单</Text>
</View> :
<View style={{ flex: 1, backgroundColor: 'white' }}>
<Text>主页布局</Text>
</View>
</Animated.View>
</PanGestureHandler>
</View>
</GestureHandlerRootView>
这样就可以实现一个简单的侧滑菜单了。需要注意的是,手写实现的侧滑菜单可能会存在一些问题,如滑动冲突、性能问题等,使用第三方组件库可以避免这些问题。