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);
}
複製代碼