2019.10.11html
详见/components/TestDemo/TodoList
node
Redux三要素:(我的理解)react
技巧:ios
/actions/actionTypes.js
actions.js 引入 import * as types from './actionTypes.js'
reducer.js 引入import {TODO_INIT, TODO_ADD} from '../actions/actionTypes.js'
复制代码
/actions/indexUI.js
经过store.getState()获取存储store数据git
经过dispatch添加store数据github
store.dispatch({
type:'USERINFO_INIT',
data:UserInfoData.resultContent
})
复制代码
但深层的组件中通常不直接使用这两个方法。npm
只有store能改变本身的内容,Reducer不能改变编程
Reudcer只是返回了更改的数据,可是并无更改store中的数据,store拿到了Reducer的数据,本身对本身进行了更新。json
Reducer必须是纯函数
它的返回结果,是彻底由传入的参数state和action决定的,这就是一个纯函数
分工合做,一人写样式,一人写逻辑。
直接收传入的props值,不作逻辑处理
在实际工做中你可使用中间件来进行日志记录、建立崩溃报告,调用异步接口或者路由。
Redux-thunk是对Redux中dispatch的增强。
配置Redux-thunk组件
/store/index
2019.10.12
npm install --save redux-saga
sagaMiddleware.run(mySagas)
function* mySaga() {} export default mySaga;
ES6的新特性:
function* mySaga() { //Generator Function(生成器函数)。
//等待捕获action
yield takeEvery(GET_MY_LIST, getList) //关键字yield——迭代器生成器
}
复制代码
排查以后的react-scripts版本有关 "react-scripts": "^3.0.1",升不了级 最新:"react-scripts": "3.2.0", 从新构建一个就行了 (死办法)
"antd": "^3.23.6",
"axios": "^0.19.0",
"connected-react-router": "^6.5.2",
"history": "^4.10.1",
"prop-types": "^15.7.2",
"react": "^16.10.2",
"react-dom": "^16.8.6",
"react-redux": "^7.1.1",
"react-router": "^5.1.2",
"react-router-dom": "^5.0.1",
"react-scripts": "3.0.1",
"redux": "^4.0.4",
"redux-thunk": "^2.3.0"
复制代码
npm install history react-router-dom react-router react-redux react-dom redux react connected-react-router prop-types -S
2019.10.12
./src/Layout/index.scss (./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-5-1!./node_modules/postcss-loader/src??postcss!./node_modules/resolve-url-loader??ref--6-oneOf-5-3!./node_modules/sass-loader/lib/loader.js??ref--6-oneOf-5-4!./src/Layout/index.scss)
@import "style/public.scss";
^
File to import not found or unreadable: style/public.scss.
in /Users/mavis/gitHub/react_2019/redux-link/src/Layout/index.scss (line 2, column 1)
复制代码
解决
{
"compilerOptions": {
"baseUrl": "src"
},
"include": ["src"]
}
复制代码
react-redux中用到两个只是:provider和connect
Provider是一个提供器,只要使用这个组件,组件里的其余全部组件均可以使用
store
了,这也是React-redux的核心组件了。
import {Provider} from "react-redux";
ReactDOM.render(
<Provider store={store}>
<TodoList/>
</Provider>, document.getElementById('root'));
复制代码
connects是一个链接器,连接
state
和dispatch
,这个能够简单的获取到store
中的数据了。 connect的做用是把UI组件(无状态组件)和业务逻辑代码的分开,而后经过connect再连接到一块儿,让代码更加清晰和易于维护。这也是React-Redux最大的有点。
import {bindActionCreators} from 'redux'
import {connect} from 'react-redux';//引入链接器
import * as TodoActions from '../actions'
const mapStateToProps = state => ({
userInfo: state.userInfo,
todosReducer: state.todosReducer
})
const mapDispatchToProps = dispatch => ({
actions: bindActionCreators(TodoActions, dispatch)
})
export default connect(
mapStateToProps,
mapDispatchToProps
)(TestScope)
复制代码
这个设置是以:开始的,而后紧跟着你传递的key(键名称)名称
<Route exact path='/v2/tdscope/build/id:?/type:?' render={props=><TodoList {...props} actions={actions}/>}/>
Link上传递值 <Link to="/list/123">列表</Link>
在组件上接收并显示传递值 this.props.match
包括三个部分:
Redirect
使用 大体两种知识点:重定向,即跳转页面,直接跳转。<Redirect to={'/app'}/>
this.props.history.push("/home/")
⚠️:重定向和跳转有一个重要的区别,就是跳转式能够用浏览器的回退按钮返回上一级的,而重定向是不能够的。
2019.10.14
平时用的变量名传递都是形参
实参
try {
getRobot(callback)
} catch (error) {
console.log(err)
}
function getRobot(callback){
var url = `${API_PATH}/lizcloud/api/liz-activitymain-api/noauth/activitymain/activity/assist/detail?tenantId=${params.tenantId}&userId=${params.userId}&activityId=${params.activityId}`
PromiseXHR(url,null,null,'get').then(res=>{
callback(res)
})
}
function callback(res) {
var resData = JSON.parse(res)
console.log('----) } 复制代码
Portals 提供了一种很好的方法,将子节点渲染到父组件 DOM 层次结构以外的 DOM 节点。 第一个参数(child)是任何可渲染的 React 子元素,例如一个元素,字符串或 片断(fragment)。第二个参数(container)则是一个 DOM 元素。
ReactDOM.createPortal(child, container)
复制代码
//建立一个全局监听事件
export const sendEvent = (key, vals) => {
var event = new Event(key);
event.vals = vals;
window.dispatchEvent(event);
}
复制代码