- react-virtualized的高階組件,Autosize可以使屏幕適配。使用render-props模式來獲取到AutoSizer組件暴露的width和height屬性。
- JSON.parse(JSON.stringify())不適用于有undefined的數據。
深拷貝的使用,不能使用在有undefined的數據中。有直接過濾undefinded的數據。 - deepcopy (遞歸深復制)性能不好,占用內存。
- immutable的拷貝:從子組件獲取到地址信息,如果有新值,新值指向新值,其他繼續引用舊函數。最好配合immutable的方法。
- mobx的使用:使用observable來訂閱信息,使用autorun來消費信息。autorun會自動去綁定里面相關的值,相關值改變時才進行改變。綁定值可以使用observable.get和observable.map綁定。裝飾器瀏覽器要識別要使用@babel/plugin-proposal-decorators,配置.babelrc添加裝飾器的語法。再安裝 npm i customize-cra react-app-rewired。
- styled-components:在js中使用css。cosnt StyledFooter = styled.footer`background: yellow`,使用標簽函數。原理是用這個去包裝你的組件,形成高階函數,且默認加上了一些樣式。
- yield和* 什么時候可以用到,在redux-sage或者dva中會使用
- redux-saga: redux的中間件,可執行副作用的異步操作數據的方法。
- formik 表單驗證,react的高階函數
- 兄弟組件通信,將共享狀態提升至最近的公父組件中,由公共父組件管理這個狀態,狀態提升。
- 樣式覆蓋:在配置路由時,CityList和Map組件都被導入到項目中,那么組件的樣式也就被導入到項目中。如果組件之間樣式名稱相同,那么一個組件中的樣式就會在另一個組件中生效,從而造成組件之間樣式相互覆蓋的問題。
- 解決方案:1、類名不同。2、scss的嵌套。3、css in js。
- css in js:指在javascript編寫css的統稱,用來解決css樣式的沖突,覆蓋等問題。常見有:css modules、styled-components等。
- css modules:實現方式,使用了webpack的css-loader插件;命名采用:BEM(block塊,element元素、modifier三部分組成)命名規范,比如:.list_item_active。
- 使用方式:創建一個名為 xxx.module.css 的樣式文件。如 import styles from "./index.module.css";
- <div style={styles.text}></div
- umijs,Dva:
- 重定向組件
import {} from "umi"; <Redirect to="/film" />
- 嵌套路由:
在pages中新建文件夾film,該文件夾下還有一個_layout.tsx,默認是訪問這個。如果同級目錄中有Comingsoon.tsx,在路徑輸入后會返回到新加的文件。
如果要使用父路由調用子路由,就使用props.children的方法。function Film(props){<div>{props.children}</div> }
如果需要讀取路由信息,使用const location = useLocation();中
可以新建一個layouts來存放根組件目錄。級別比較高,需要使用{props.children}顯示視圖。
- 重定向組件
- GraphQL的使用:進行處理數據,規定后端一些字段。
- umi下的dvajs:原生dvajs,要手動注冊redux的同步和異步。
- umi就不用手動注冊。
- 全局安裝npm install dva-cli -g