learning react depth

** 可以根據我提交記錄去查看相關內容** click here

學習原地址和文檔地址如下
原倉庫地址
原文檔地址

parcel

install

npm install -g parcel-bundler

.babelrc

{
    "presets": ["@babel/preset-react", "@babel/preset-env"]
  }

use

src/index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Adopt me</title>
    <link rel="stylesheet" href="./style.css">
</head>

<body>
    <div id="root">not rendered  </div>
    <script src="./app.js"></script>
</body>

</html>

app.js

import React from 'react'
import ReactDOM from 'react-dom'
import SearchParams from './SearchParams'

const App = () => {
  return (
    <div>
        hello world
    </div>
  )
}
ReactDOM.render(<App />, document.getElementById("root"));

package.json

"scripts": {
    "clear-build-cache": "rm -rf .cache/ dist/",
    "dev": "parcel src/index.html --port 3000 ",
    "format": "prettier --write \"src/**/*.{js,jsx}\"",
  },

npm run dev

css in js

use emotion.js,document click here

install

npm install --save @emotion/core @emotion/babel-preset-css-prop

.babelrc

{
  "presets": [
    "@babel/preset-react",
    "@babel/preset-env",
    [
      "@emotion/babel-preset-css-prop",
      {
        "sourceMap": false
      }
    ]
  ],
}

use

import React from 'react'
import { css,keyframes } from '@emotion/core'
import { Link } from '@reach/router'

const Spin=keyframes`
    to {
        transform:rotate(360deg);
    }
`;

export default function NavBar() {
    return (
        <header css={css`
        background-color:#333;
        position:sticky;
        top:0;
        `}>
            <Link to="/">Adopt Me!</Link>
            <span 
            css={css`
                animation:1s ${Spin} linear infinite;
                font-size:60px;
            `}
            aria-label="logo" 
            role="img"> ?</span>
        </header>
    )
}

** vscode 下載 styled-components插件

typescipt

npm i typescript -D

npx tsc --init //init ts config

test

npm i -D jest @testing-library/react

package.json

scripts:{
    "test": "jest",
    "test:coverage": "jest --coverage",
    "test:watch": "jest --watch"
}

接下來進入src目錄並創建一個名爲的文件夾__tests__。請注意,兩邊都是雙下劃線;在這種情況下,Jest假定此處的所有JS文件都是測試

SearchParams.test.js

import React from 'react'
import {render,cleanup,fireEvent} from '@testing-library/react'
import pet,{ANIMALS,_breeds,_dogs} from '@frontendmasters/pet'
import SearchParams from '../SearchParams'

// 退出時進行清理
afterEach(cleanup);

test('SearchParams ', async() => {
    const {getByTestId,getByText}=render(<SearchParams/>);
    const animalDropdown=getByTestId('use-dropdown-animal');
    expect(animalDropdown.children.length).toEqual(ANIMALS.length+1)
    //確保api 調用正確
    expect(pet.breeds).toHaveBeenCalled();
    
    const breedDropdown=getByTestId('use-dropdown-breed');
    expect(breedDropdown.children.length).toEqual(_breeds.length+1);

    //form 提交測試
    const searchResults = getByTestId("search-results");
    expect(searchResults.textContent).toEqual("No Pets Found");
    //click @todo 需要將異步請求改爲同步
    fireEvent(getByText("Submit"), new MouseEvent("click"))
});

如果遇到 asyc語法問題,例如: ReferenceError: regeneratorRuntime is not defined
此時,需要babel 轉譯支持步驟如下:

npm i @babel/plugin-transform-runtime @babel/runtime -D

`.babelrc`
{
    "presets": ["@babel/preset-env"],
    "plugins": [
        ["@babel/transform-runtime"]
    ]
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章