react开发简书学习笔记

本文详细介绍了使用React和Redux构建应用程序的过程,包括组件化、状态管理、路由设置、性能优化等关键步骤,以及如何利用immutable.js和redux-thunk进行数据处理和异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、引入styled-components
样式文件实际上是一个个组件,这样就不会互相影响
2、用iconfont嵌入图标
3、安装动画实现搜索框

cnpm install react-transition-group --save

通过失焦和获焦来改变样式

4安装redux和react-redux

5 、reducer拆分

combineReducers

6、immutable.js可以生成不可改变的对象immutable

  • fromjs方法可以把数据对象转化成对象
  • immutable对象的set的方法,会结合之前的对象值,返回一个全新的对象
  • immutable对象的merge的方法,返回多个immutable对象,merge的语法

因为手动没法保证reducer中的state不被修改
自己的get方法来获取,set方法来设置

redux-immutable统一数据格式

7、在搜索框中异步加载ajax数据用的是redux-thunk插件,目的是可以在action中写入函数,使得ajax可以放在action中,action和store中间件,dispatch方法的一个升级

8、使用,在store中的index.js中引入,applyMiddleware(redux提供的方法)

9、可以在public中创建文件写入虚拟的数据

{
	"success":true,
	"data":[]
}

创建一个anction,dispatch给reducer
初始化时immutable对象,此时的代码数组是普通的对象,要转化为immutable对象

10、优化

  • 用解构赋值做代码得优化
  • 用swich case代替if else

11、可以把immutable的数组转化为普通的数组
toJS()

12、写旋转动画时,用ref获取dom元素,对dom元素进行操作
13、性能优化,解决点击输入框多次获取ajax数据
当list.size===0时请求数据

路由:
就是url的不同
import {BrowserRouter,Route} from ‘react-router-dom’;//表示引入

前端组件化,把页面拆分成一个个的组件,组件自己来维护交互和显示

reducer中管理数据

Provider使得它里面的子组件可以使用store
Provider的唯一功能就是传入store对象。
react-redux中的connect方法,连接store,拿到store里面的数据(包装出一个容器组件)
有俩个方法mapState(从store里面拿数据),通过state.get()或者state.getIn()
和map
import {connect} from ‘react-redux’;
export default connect()(Topic);

循环immtable数组用的是item.get

首页调用ajax数据

state.merge一次合并多个属性多个set
调用ajax,要改变store里面的数据,
第一步:创建action
第二步:把action派发给store,用connect的dispatch方法
第三步:创建mapDispatch,等于一个对象
第四步:在reducer中接收action
第五步:修改为immediate对象
第六步:用state.merge修改为新的值(多个set的合并)

异步操作代码的优化

1、ui组件与容器组件的分离,
2、容器组件可以由redux-thunk中间间放在action中管理,action在actionCreators中创建,redux-thunk使得我们可以返回一个函数,所有异步操作在actionCteators中进行

点击加载更多
1、点击时让action做异步请求数据的操作
2、在mapDispatch中加入点击事件,diapatch给store
(UI组件由参数(this.props)提供)
3、在actionCreators中创建action,在组件中引入
4、通过一个对象来帮助派发一个action
5、在reducer.js中通过.set方法改变state数据

分页
1、在reducer中加入一个默认页
2、在组件中获取这个页的参数传递
3、在actionCreators中接收这个参数加入地址后面
4、接收下一页的参数
5、在reducer中改变页的内容

回到顶部

1、在reducer中设置默认属性showScroll为false,
2、在组件中使用属性(mapState)
showScroll:state.getIn([‘home’,‘showScroll’])
3、设置监听scroll事件
4、在mapDispatch中dispatch给store,其中dispatch接收actionCreators的一个对象
5、在reducer中改变action的属性

Detail
1、写页面
2、在store中管理数据
3、改为非转义html

 <Content
                dangerouslySetInnerHTML={{__html: content}}
 />

一定要是单标签

ajax请求数据

页面路由传参(点击进入详情页)
动态路由传参
1、路由的出口设置

<Route path='/detail/:id' component={Detail}  exact></Route>

2、路由的入口设置

<Link key={index} to={'/detail/'+item.get('id')}>

3、在对应的子路由中获取参数

this.props.match.params.id

4、在ajax请求中axios加入参数
‘/api/detail.json?id=’+id

登陆页面功能
1、点击登陆的时候,获取账号和密码的ref,用的是innerRef(在styled-component)中
2、派发给actionCreators
3、在actionCreators中用ajax请求
4、向模拟接口传递账号和密码
5、如果成功返回一个true的dispatch给reducer
6、登陆成功后,Redirect重定向到首页
退出
1、点击事件
2、派发一个action给actionCreators,然后在reducer中修改值

写文章的授权:
登陆状态true,跳转到写文章,false,跳转到登陆

异步组件和withRouter路由方法的使用
异步组件:每次只加载对应浏览的页面(优化)

cnpm install react-loadable --save

import Loadable from 'react-loadable';
import React from 'react'

const LoadableComponent = Loadable({
  loader: () => import('./'),
  loading(){
      return <div>正在加载......</div>
  }
});

export default ()=><LoadableComponent/>

import {withRouter} from 'react-router-dom'
(withRouter(Detail))

项目上线流程
打包cnpm run build
然后放到服务器的文件里面

涉及到的技术:
redux数据层框架,react中如何方便使用redux
react-router immtableJS,style-comment,第三方模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值