React入门

以下文章是本人在学习中搜集所得,来自尚硅谷视频教学。

扶程星云 2023年7月

目录

React入门

组件化编程流程

通信和订阅消息

关于父子之间通信

订阅消息

路由

路由的基本使用

路由组件与一般组件

NavLink与封装NavLink

Switch的使用

解决多级路径刷新页面样式丢失的问题

路由的严格匹配与严格匹配

Redirect的使用

嵌套路由

向路由组件传递参数

编程式路由导航

BrowserRouter与HashRouter的区别

组件化编程流程

功能界面的组件化编程流程

1、拆分组件:拆分界面,抽取组件

2、实现静态组件:使用组件实现静态页面效果

3、实现动态组件

3.1 动态显示初始化数据

3.1.1 数据类型

3.1.2 数据名称

3.1.3 保存到哪个组件?

3.2 交互(从绑定事件监听开始)

4、注意defaultChecked和checked的区别,类似的还有:defaultValue和value

5、状态在哪里,操作状态的方法就在哪里

通信和订阅消息

关于父子之间通信

  1.【父组件】给【子组件】传递数据:通过props传递

  2.【子组件】给【父组件】传递数据:通过props传递,要求父提前给子传递一个函数

订阅消息

1、消息名

2、发布消息

路由

路由的基本使用

1、明确好界面中的导航区、展示区

2、导航区的a标签改为Link标签

   <Link to ="/xxxxx">Demo</Link>

3、展示区写Route标签进行路径的匹配

   <Route path='/xxxx' component={Demo} />

4、<App>的最外侧包裹了一个<BrowserRouter>或<HashRouter>

路由组件与一般组件

1、写法不同:

       一般组件:<Demo/>

       路由组件:<Route path="/demo" component={Demo} />

2、存放位置不同:

       一般组件:components

       路由组件:pages

3、接收到的props不同:

       一般组件:写组件标签时传递了什么,就能收到什么

       路由组件:接收到三个固定的属性

NavLink与封装NavLink

1、NavLink可以实现路由链接的高亮,通过activeClassName指定样式名

2、标签体内容是一个特殊的标签属性

3、通过this.props.children可以获取标签体内容

Switch的使用

1、通常情况下,path和component是一一对应的关系。

2、Switch可以提高路由匹配效率(单一匹配)。

解决多级路径刷新页面样式丢失的问题

1、public/index.html中,引入样式时不写 ./ 写 /(常用)

2、public/index.html中,引入样式时不写 ./ 写 %PUBLIC_URL%(常用)

3、使用HashRouter

路由的严格匹配与严格匹配

 1、默认使用的是模糊匹配(简单记:【输入的路径】必须包含要【匹配的路径】,且顺序要一致)

 2、开启严格匹配:<Route exact={true} paht="/about" component={About}/>

 3、严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由

Redirect的使用

  1、一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由

  2、具体编码:

     <Switch>

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

        <Route path="/home" component={Home}/>

        <Redirect to="/about"/>

</Switch>

嵌套路由

  1、注册子路由时要写上父路由的path值

  2、路由的匹配是按照注册路由的顺序进行的

向路由组件传递参数

   1、params参数

        路由链接(携带参数):<Link to='/demo/test/tom/18'>详情</Link>

    注册路由(声明接收):<Route path="/demo/test/:name/:age" component={Test}/>

接收参数: this.props.match.params

2、search参数

路由链接(携带参数):<Link to='/demo/test?name=to?name=tom&age=18'}>详情</Link>

   注册路由(无需声明,正常注册即可):<Route path="/demo/test" component={Test}/>

   接收参数: this.props.location

   备注:获取到的search是urlencoded编码字符串,需要借助querystring解析

  3、state参数

   路由链接(携带参数):<Link to={{path:'/demo/test',state:{name:'tom',age:18}}}>详情</Link>

   注册路由(无需声明,正常注册即可):<Route path="/demo/test" component={Test}/>

   接收参数: this.props.location.state

   备注:刷新也可以保留住参数

编程式路由导航

    借助this.props.history对象上的API对操作路由跳转、前进、后退

   -this.props.history.push()

   -this.props.history.replace()

   -this.props.history.goBack()

   -this.props.history.goForward()

   -this.props.history.go()

   

BrowserRouter与HashRouter的区别

  1.底层原理不一样

        BrowserRouter使用的是H5的History_API,不兼容IE8及以下版本。

HashRouter使用的是URL的哈希值.

  2.URL表现形式不一样

      BrowserRouter的路径中没有#,例如:localhost:3000/#/demo/test

  3.刷新后对路由state参数的影响

   (1).BrowserRouter没有任何影响,因为state保存在history对象中

    (2) HashROuter刷新后会导致路由state参数的丢失.

4.备注:HashRouter可以用于解决一些路径错误相关的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中亿丰数字科技集团有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值