




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第React从插槽、路由、redux的详细过程目录1.React插槽2.React路由2.1安装库2.2ReactRouter三大组件2.3路由其他方法2.4重定向组件2.5Switch组件2.6示例3.redux3.1主要作用3.2使用步骤4.react-redux4.1基本概念内容
清楚React插槽
弄明白React路由
会使用redux及react-redux
1.React插槽
组建中写入内容,这些内容可以被识别和控制。React需要自己开发支持插槽功能。原理:父组件组件中写入的HTML,可以传入子组件的props中。
1.组件中的HTML内容直接全部插入
2.组件中根据HTML内容的不同,插入的位置不同
示例:
classAppComextendsReact.Component{
constructor(props){
super(props);
this.state={}
render(){
return(
div
h1我是App根组件/h1
h1-----------------/h1
SlotCom
h3我是插槽内的文字1/h3
h3我是插槽内的文字2/h3
h3我是插槽内的文字3/h3
/SlotCom
h1------------------/h1
SlotChangeCom
h2className="header"Header/h2
h2className="main"Main/h2
h2className="footer"Footer/h2
/SlotChangeCom
/div
classSlotComextendsReact.Component{//组件中HTML内容直接全部插入
render(){
console.log(ps)
return(
div
{ps.children}
/div
classSlotChangeComextendsReact.Component{//组件中HTML内容不同,插入位置不同(注意此处的值也可自定义,均可早props中拿到)
render(){
console.log(ps)
letHeaderCom,MainCom,FooterCom;
ps.children.forEach((item,index)={
if(ps['className']==='header'){
HeaderCom=item
}elseif(ps['className']==='main'){
MainCom=item
}else{
FooterCom=item
return(
div
div
{HeaderCom}
/div
div
{MainCom}
/div
div
{FooterCom}
/div
/div
2.React路由
根据不同的路径,显示不同的组件(内容);React使用的库react-router-dom;
2.1安装库
npminstallreact-router-dom--save
2.2ReactRouter三大组件
Router:所有路由组件的根组件(底层组件),包裹路由规则的最外层容器。属性:basename-设置当前路由根路径,router可以在1个组件中写多个。Link:路由跳转的组件,主要配合to实现路由跳转。Route:路由规则匹配组件,显示当前规则对应的组件。
2.3路由其他方法
如果要精确匹配,那么可以在route上设置exact属性。Link组件可以设置to属性来进行页面的跳转,to属性可以直接写路径的字符串,也可以通过1个对象,进行路径的设置。Link的replace属性:点击链接后,将新地址替换成历史访问记录的原地址。
2.4重定向组件
如果访问某个组件时,如果有重定向组件,那么就会修改页面路径,使得页面内容显示为所定向路径的内容
RedirectRedirect
2.5Switch组件
让switch组件内容的route只匹配1个,只要匹配到了,剩余的路由规则将不再匹配
注意:Switch组件只能包裹在Route组件外面
2.6示例
1.效果
2.代码
importReactfrom'react';
import'./index.css';
//import{HashRouterasRouter,Link,Route}from'react-router-dom';//哈希模式
import{BrowserRouterasRouter,Link,Route,Redirect,Switch}from'react-router-dom';//history模式
functionOne(){//定义单个组件做演示
return(
h1我是ONE/h1
functionTwo(){
return(
h1我是TWO/h1
functionThree(props){
console.log(props)//接收传递的参数
return(
h1我是THREE/h1
functionNews(props){
console.log(props.match.params.id)//拿到动态路由传递的参数
return(
h1我是动态路由页/h1
functionGoTwo(){
return(
Redirectto="/two"/Redirect
classRouterComextendsReact.Component{
constructor(props){
super(props)
this.state={
render(){
letthreeObj={
pathname:'/three',//传入的路径
search:'id=1',//get请求参数
hash:'#three',//设置Hash值
state:{msg:'helloworld'}//传入组件的数据
return(
div
Router{/*Router含有basename属性,表示基础路径自动加上basename的值;用其可进行嵌套子路由*/}
divclassName="tab"
Linkto="/one"ONE/Link
Linkto="/two"TWO/Link
Linkto={threeObj}replaceTHREE/Link
Linkto="/news/2"NEWS/Link
Linkto="/gotwo"goTwo/Link
/div
Switch
Routepath="/one"exactcomponent={One}/Route
Routepath="/one"exactcomponent={One}/Route
Routepath="/two"exactcomponent={Two}/Route
Routepath="/three"exactcomponent={Three}/Route
Routepath="/news/:id"exactcomponent={News}/Route
Routepath="/gotwo"exactcomponent={GoTwo}/Route
/Switch
/Router
/div
exportdefaultRouterCom
3.redux
解决React数据管理(状态管理),用于中大型,数据比较庞大,组件之间数据交互多的情况下使用。如果你不知道是否需要使用Redux,那么你就不需要用它!
3.1主要作用
解决组件的数据通信。解决数据和交互较多的应用
Redux只是一种状态管理的解决方案!
Store:数据仓库,保存数据的地方。
State:state:是1个对象,数据仓库里的所有数据都放到1个state里。
Action:1个动作,触发数据改变的方法。
Dispatch:将动作触发成方法。
Reducer:是1个函数,通过获取动作,改变数据,生成1个新state。从而改变页面。
3.2使用步骤
安装redux:npminstallredux创建reducer函数创建仓库修改数据(通过动作修改数据)获取数据修改视图(监听数据的变化,重新渲染内容)
示例:
预览:
代码:
importReactfrom'react';
importReactDOMfrom'react-dom';
import{createStore}from'redux';
classComputerComextendsReact.Component{//创建需要展示数据的组件
render(){
letstate=store.getState();//通过getState()方法获取Store里的值
return(
div
h1Store里边的数:{state.num}/h1
buttonadd}自加1/button
buttonsubtraction}自减1/button
/div
functionreducer(state={num:0},action){//Reducer:是1个函数(初始化数据),通过获取动作,改变数据,生成1个新state。从而改变页面
switch(action.type){
case"add":
state.num++
break;
case"subtraction":
state.num--;
break;
default:
break;
return{...state}//此处返回相当于对象的copy
conststore=createStore(reducer);//创建仓库(必须传入reducer)
//定义要操作的方法
functionadd(){
store.dispatch({type:"add"})//通过仓库的方法dispatch进行修改数据
//store.dispatch({type:"add",content:{id:1,msg:"helloworld"}})也可在修改数据时传入参数
functionsubtraction(){
store.dispatch({type:"subtraction"})//通过仓库的方法dispatch进行修改数据
ReactDOM.render(ComputerCom/ComputerCom,document.querySelector("#root"))
//通过store.subsctibe()方法(必须传入函数)修改视图(监听数据的变化,重新渲染内容)
store.subscribe(()={
ReactDOM.render(ComputerCom/ComputerCom,document.querySelector("#root"))
注意:所有的数据操作均在reducer中完成,其他函数不可修改数据,只能将动作触发成方法
4.react-redux
react-redux是对redux的进一步完善,它避免了redux每次修改数据都要调用渲染函数的弊端
4.1基本概念
安装:npminstallreact-redux注意,使用时还要安装redux
Provider组件:自动的将store里的state和组件进行关联。
MapStatetoProps:这个函数用于将store的state映射到组件的props里,实现数据共享。(函数名自定义)
mapdispatchToProps:将store中的dispatch映射到组件的props里,实现了方法的共享。(函数名自定义)
Connect方法:将组件和数据(方法)进行连接。
示例(执行结果与redux演示同):
importReactfrom'react';
importReactDOMfrom'react-dom';
import{createStore}from'redux';
import{connect,Provider}from'react-redux';
classComputedComextendsReact.Component{
render(){
//仓库的数据,通过store的state传给props,直接通过props就可以获取state的数据
constvalue=ps.value;
//将修改数据的方法传入到props中(等同于vuex的mapMutation映射)
constclickAdd=ps.clickAdd;
constclickSub=ps.clickSub;
return(
div
h1Store里面的数:{value}/h1
buttonclickAdd}自加1/button
buttonclickSub}自减1/button
/div
letactionObj={
add:function(state,action){
state.num++;
returnstate
sub:function(state,action){
state.num=state.num+action.num;//action.num接收传递的参数
returnstate
functionreducer(state={num:0},action){//#Reducer:是1个函数(初始化数据),通过获取动作,改变数据,生成1个新state。从而改变页面
//如果方法过多,可以把它写在外面
/*switch(action.type){
case"add":
state.num++
break;
case"sub":
state.num--;
break;
default:
break;
}*/
if(action.type.indexOf('redux')===-1){//判断数据是否初始化,若无初始化,先初始化
state=actionObj[action.type](state,action);
return{...state}//#状态结构,防止哈希值相同,不进行解析
}else{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 投资车行合同协议书
- 合同变更协议书范文
- 环保咨询合同协议书
- 合同协议书纸质
- 口罩合同协议书
- 增加合同协议书
- 委托设备购销合同协议书
- 合同协议书字体
- 石材晶面合同协议书
- 品牌服务协议书合同范本
- 个人拍摄合同范本
- 第10课和谐校园共同维护(课件)-【中职专用】高一思想政治《心理健康与职业生涯》(高教版2023·基础模块)
- 2024年04月江苏省农业农村厅直属事业单位2024年公开招考工作人员笔试历年高频考题摘选后附答案详解
- 多图中华民族共同体概论课件第十三讲先锋队与中华民族独立解放(1919-1949)根据高等教育出版社教材制作
- 伤口造口进修汇报护理
- 口才与演讲实训教程智慧树知到期末考试答案2024年
- 档案整理及数字化服务售后服务方案
- 打造消费天堂(百货公司与近代城市文化)
- 2024年一年级《体育与健康》全册教案
- 臂丛神经损伤康复护理
- 2023路用热拌环氧沥青
评论
0/150
提交评论