react學(xué)習(xí)筆記

1.資源文件位置 圖片一般放在src/assets目錄下
2.如何引入文件路徑

1.可以使用create-react-app提供的yarn run eject 將所有內(nèi)建的配置暴露出來(lái),然后配置
2.Create React App 3可以使用絕對(duì)路徑,參考官網(wǎng)或者網(wǎng)上一些文章胳搞,例如https://medium.com/@ktruong008/absolute-imports-with-create-react-app-4338fbca7e3d
3.我們需要對(duì) create-react-app 的默認(rèn)配置進(jìn)行自定義软能,這里我們使用 react-app-rewired (一個(gè)對(duì) create-react-app 進(jìn)行自定義配置的社區(qū)解決方案)驶社。
引入 react-app-rewired 并修改 package.json 里的啟動(dòng)配置堵腹。由于新的 react-app-rewired@2.x 版本的關(guān)系,你還需要安裝

customize-cra俄周。
    const {
        override,
        fixBabelImports,
        addWebpackAlias
    } = require('customize-cra')
    const path = require('path')

    function resolve(dir) {
        return path.join(__dirname, '.', dir)
    }
    module.exports = override(
        // 配置路徑別名
        addWebpackAlias({
            views: resolve('src/views'),
            service: resolve('src/service'),
            store: resolve('src/store'),
            utils: resolve('src/utils')
        }),
        // antd按需加載
        fixBabelImports('import', {
            libraryName: 'antd',
            libraryDirectory: 'es',
            style: 'css'
        })
    )
3 react中css解決方案

1 原生CSS結(jié)合CSS處理器(Sass和PostCSS/less):該方式樣式易于全局污染吁讨,多人協(xié)作易于發(fā)生沖突
引入less或sass ,css文件以.less或.scss結(jié)尾,然后引入
2 React中編寫CSS常見(jiàn)的方式
Inline CSS
CSS In JS
Styled Components
CSS Modules 使用CSS Modules編寫CSS峦朗,相比原生CSS是舒服多了建丧,但引用組件庫(kù)(獨(dú)立庫(kù))就有點(diǎn)頭疼,組件庫(kù)樣式覆蓋令人頭疼
可參考這篇文章https://juejin.im/post/5b39e63ae51d4562aa017c81#heading-9
使用css module方式
css文件結(jié)尾 [name].module.scss
import header from './index.module.less';
jsx 文件 如果css命名為短橫線形式的需要使用[]

function Header() {
    return (
        <header className={header['App-header']}>
            <div className={header['headerWrap']}>
                <img src={logo} className={header['App-logo']} alt="logo" />
                <div>
                    <Link to="/home" className={header['App-link']}>首頁(yè)</Link>
                    <Link to="/about" className={header['App-link']}>關(guān)于</Link>
                    <Link to="/login" className={header['App-link']} >登錄 </Link>
                </div>
            </div>
        </header>
    );
}
4 國(guó)際化

react-18next

5 打包 在package.json 加入"homepage": "."
6 跨域

在src/目錄下新建setupProxy.js

先安裝npm install --save-dev http-proxy-middleware
const proxy = require('http-proxy-middleware')
module.exports = function (app) {
    app.use(proxy('/api/v1', {
        target: 'https://cnodejs.org',
        changeOrigin: true
    }));
}

要寫changeOrigin: true
參考 https://github.com/chimurai/http-proxy-middleware

7 可以搭配metiara ui
8 grid 布局

這個(gè)挺好用的波势,但是兼容還是有待考慮翎朱,目前flex用的比較多

9 react中使用svg icon

1或許可以自己封裝成一個(gè)組件
2creat-react-app中有提供功能
直接導(dǎo)入svg作為React組件

import { ReactComponent as Logo } from './logo.svg';
const App = () => (
  <div>
    {/* Logo 是一個(gè)實(shí)際的 React 組件 */}
    <Logo />
  </div>
);
  >3直接改變
  .App-logo g{
      fill:salmon;
  }
  .App-logo path{
      stroke:palegoldenrod;
      stroke-width:10px;
      fill:none;
      stroke-dasharray;35px 15px;
      animation:orbit 1s infinite linear;
  }
  @keyframes orbit {to {stroke-dashoffset:50px;}}

https://www.html.cn/create-react-app/docs/adding-images-fonts-and-files/
可能涉及到的名詞 svgr react-svg-loader
可參考文章https://medium.com/@rossbulat/working-with-svgs-in-react-d09d1602a219
https://www.robinwieruch.de/react-svg-icon-components
https://medium.com/itsoktomakemistakes/react-create-react-app-svg-icons-styled-component-570b4e9f07b
webpack加載程序是SVGR提供的三個(gè)主要解決方案之一橄维,具體取決于您是希望在命令行上,在自動(dòng)腳本中操作SVG拴曲,還是在將它們導(dǎo)入模塊時(shí):

@svgr/cli:CLI工具争舞,為我們提供了簡(jiǎn)單的命令,可以將單個(gè)文件或整個(gè)SVG文件目錄轉(zhuǎn)換為React組件.js文件
@svgr/core:此核心SVGR包旨在嵌入NodeJS程序中澈灼,以構(gòu)建用于將SVG處理為組件的自動(dòng)化工具
@svgr/webpack:最廣泛采用的解決方案竞川,以及將SVG作為React組件導(dǎo)入的優(yōu)雅方法
作為Rollup或Parcel插件:另外兩個(gè)Javascript模塊捆綁包,它們不太了解蕉汪,但支持SVGR流译。
使用前三個(gè)包裝的優(yōu)點(diǎn)是相輔相成的; 如果需要逞怨,可以在React項(xiàng)目的SVG管理工作流程中采用CLI者疤,Node API和Webpack包。
然而叠赦,我們?cè)谶@里專注于Webpack加載器驹马,我們將在本文的后面進(jìn)一步使用它來(lái)演示現(xiàn)代SVG集成的實(shí)際用例。

10 代碼分割
使用之前:
import { add } from './math';
console.log(add(16, 26));
使用之后:
import("./math").then(math => {
  console.log(math.add(16, 26));
});

動(dòng)態(tài) import() 語(yǔ)法目前只是一個(gè) ECMAScript (JavaScript) 提案除秀, 而不是正式的語(yǔ)法標(biāo)準(zhǔn)糯累。預(yù)計(jì)在不遠(yuǎn)的將來(lái)就會(huì)被正式接受。
當(dāng) Webpack 解析到該語(yǔ)法時(shí)册踩,它會(huì)自動(dòng)地開(kāi)始進(jìn)行代碼分割泳姐。如果你使用 Create React App,該功能已配置好暂吉,你能立刻使用這個(gè)特性胖秒。Next.js 也已支持該特性而無(wú)需再配置。

11懶加載

React.lazy
注意:
React.lazy 和 Suspense 技術(shù)還不支持服務(wù)端渲染慕的。如果你想要在使用服務(wù)端渲染的應(yīng)用中使用阎肝,我們推薦 Loadable Components 這個(gè)庫(kù)。它有一個(gè)很棒的服務(wù)端渲染打包指南肮街。
React.lazy 函數(shù)能讓你像渲染常規(guī)組件一樣處理動(dòng)態(tài)引入(的組件)风题。

使用之前:

import OtherComponent from './OtherComponent';
function MyComponent() {
  return (
    <div>
      <OtherComponent />
    </div>
  );
}

使用之后:

const OtherComponent = React.lazy(() => import('./OtherComponent'));

function MyComponent() {
  return (
    <div>
      <OtherComponent />
    </div>
  );
}

這個(gè)代碼將會(huì)在渲染組件時(shí),自動(dòng)導(dǎo)入包含 OtherComponent 組件的包嫉父。

React.lazy 接受一個(gè)函數(shù)沛硅,這個(gè)函數(shù)需要?jiǎng)討B(tài)調(diào)用 import()。它必須返回一個(gè) Promise绕辖,該 Promise 需要 resolve 一個(gè) defalut export 的 React 組件摇肌。

12命名導(dǎo)出(Named Exports)

React.lazy 目前只支持默認(rèn)導(dǎo)出(default exports)。如果你想被引入的模塊使用命名導(dǎo)出(named exports)引镊,
你可以創(chuàng)建一個(gè)中間模塊朦蕴,來(lái)重新導(dǎo)出為默認(rèn)模塊篮条。這能保證 tree shaking 不會(huì)出錯(cuò),并且不必引入不需要的組件吩抓。

// ManyComponents.js
export const MyComponent = /* ... */;
export const MyUnusedComponent = /* ... */;
// MyComponent.js
export { MyComponent as default } from "./ManyComponents.js";
// MyApp.js
import React, { lazy } from 'react';
const MyComponent = lazy(() => import("./MyComponent.js"));

mage-webapck-loader涉茧,safari和firefox和ie都無(wú)法顯示圖片,之前不知道是插件的原因疹娶,所有各種找問(wèn)題

13Gatsby

用 React 創(chuàng)建靜態(tài)網(wǎng)站的最佳方式伴栓。它讓你能使用 React 組件,但輸出預(yù)渲染的 HTML 和 CSS 以保證最快的加載速度雨饺。
https://zh-hans.reactjs.org/docs/create-a-new-react-app.html#gatsby

14useEffect 頻繁請(qǐng)求接口

https://juejin.im/post/5c98fb35518825157172acc6#heading-0

=======================useReducer========================

1.使用useReducer 和useContext 可以替代redux和react-redux 的功能(使用useReducer和useContext Hooks構(gòu)建自己的React-Redux钳垮,性能優(yōu)化有待考慮),但這并不意味著你放棄使用redux额港,因?yàn)閞edux還有很強(qiáng)大的功能饺窿,或許你
可以根據(jù)情況選擇性的使用

2.react-redux 也提供了hook API,可以替代connect方法 移斩,useActions() 這個(gè)在alpha版本中被刪除肚医。該建議基于“binding action creators”在基于鉤子的用例中沒(méi)有用處,并且導(dǎo)致過(guò)多的概念開(kāi)銷和語(yǔ)法復(fù)雜性向瓷。
當(dāng)然你可以手動(dòng)實(shí)現(xiàn)一個(gè)肠套。

// function FriendStatusWithCounter(props) {
//     const [count, setCount] = useState(0)
//     useEffect(() => {
//         document.title = `You clicked ${count} times`
//     })
//     const [isOnline, setisOnline] = useState(null)
//     useEffect(() => {
//         function handleStatusChange(status) {
//             setisOnline(status.isOnline)
//         }
//         ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
//         return () => {
//             ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
//         };
//     })
// }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市猖任,隨后出現(xiàn)的幾起案子你稚,更是在濱河造成了極大的恐慌,老刑警劉巖朱躺,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁赖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡室琢,警方通過(guò)查閱死者的電腦和手機(jī)乾闰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盈滴,“玉大人涯肩,你說(shuō)我怎么就攤上這事〕驳觯” “怎么了病苗?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)症汹。 經(jīng)常有香客問(wèn)我硫朦,道長(zhǎng),這世上最難降的妖魔是什么背镇? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任咬展,我火速辦了婚禮泽裳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘破婆。我一直安慰自己涮总,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布祷舀。 她就那樣靜靜地躺著瀑梗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裳扯。 梳的紋絲不亂的頭發(fā)上抛丽,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音饰豺,去河邊找鬼亿鲜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哟忍,可吹牛的內(nèi)容都是我干的狡门。 我是一名探鬼主播陷寝,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锅很,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了凤跑?” 一聲冷哼從身側(cè)響起爆安,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仔引,沒(méi)想到半個(gè)月后扔仓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咖耘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年翘簇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儿倒。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡版保,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夫否,到底是詐尸還是另有隱情彻犁,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布凰慈,位于F島的核電站汞幢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏微谓。R本人自食惡果不足惜森篷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一输钩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仲智,春花似錦张足、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岩馍,卻和暖如春碉咆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛀恩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工疫铜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人双谆。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓壳咕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顽馋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谓厘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容