• 前端学习--React(1)


    一、React简介

    React由Meta公司研发,是一个用于 构建Web和原生交互界面的库

    优势:组件化开发、不错的性能、丰富生态(所有框架中最好)、跨平台(web、ios、安卓)

    开发环境搭建

    打开相应文件夹 新建终端并输入

    npx create-react-app react1

    就可以得到一个名为react1 的项目

    运行一下↓

    在package.json中,这是两个核心依赖包

    1. "react": "^18.2.0",
    2. "react-dom": "^18.2.0",

     下面是可以执行的命令,开发阶段执行start,开发完毕打包执行build

    1. "scripts": {
    2. "start": "react-scripts start",
    3. "build": "react-scripts build",
    4. "test": "react-scripts test",
    5. "eject": "react-scripts eject"
    6. },

    所有的开发工作在src中执行,最开始只保留App.js和index.js即可

    然后精简一下App.js和index.js

    1. //index.js
    2. //项目入口
    3. //导入必要的核心包
    4. import React from 'react';
    5. import ReactDOM from 'react-dom/client';
    6. //导入项目根组件
    7. import App from './App';
    8. //把App根组件渲染到index.html中id为root的dom节点上
    9. const root = ReactDOM.createRoot(document.getElementById('root'));
    10. root.render(
    11. <App />
    12. );
    1. //App.js
    2. //项目根组件
    3. function App() {
    4. return (
    5. <div className="App">
    6. this is react
    7. div>
    8. );
    9. }
    10. export default App;

    二、JSX基础

    JSX基础和概念

    JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构,它是React中编写 UI模版的方式

    既具有HTML声明式写法,又有JS的可编程能力

    JSX在原生JS中无法被识别,那如何渲染到浏览器中?

    JSX本质

    是js语法扩展,需要解析工具(babel)才能在浏览器中运行

    Babel · Babel (babeljs.io)

     JSX场景

    jsx可以通过{}识别js表达式,有以下四种情况:

    1. 使用引号传递字符串

    2. 使用JavaScript变量

    3. 函数调用和方法调用

    4. 使用JavaScript对象

    1. function printName(){
    2. return 'Rose'
    3. }
    4. function App() {
    5. const count = 1000
    6. return (
    7. <div className="App">
    8. {/*1 使用引号传递字符串 */}
    9. {'this is react project'}
    10. {/* 2 识别js变量 */}
    11. {count}
    12. {/* 3 函数调用 */}
    13. {printName()}
    14. {/* 4 方法调用 */}
    15. {new Date().getDate()}
    16. {/* 5 使用js对象 */}
    17. {/* 外层花括号是识别表达式的语法,内层是对象结构 */}
    18. <div style={{color : 'red'}}>this is red colordiv>
    19. div>
    20. );
    21. }
    22. export default App;

     

    JSX列表渲染

    核心方法是map,循环哪个结构就在map里return哪个结构,不要忘记每个循环元素都要有唯一标识key

    1. const list = [
    2. {
    3. name:'Alice',
    4. id:1001
    5. },
    6. {
    7. name:'Bob',
    8. id:1002
    9. },
    10. {
    11. name:'Candy',
    12. id:1003
    13. }
    14. ]
    15. function App() {
    16. return (
    17. <div className="App">
    18. this is a list
    19. <ul>
    20. {list.map(item => <li key={item.id}>{item.name}li>)}
    21. ul>
    22. div>
    23. );
    24. }

    JSX条件渲染

    基础情况

    可以通过逻辑与&&(控制一个元素)和三元表达式:?(两个元素)实现基础的条件渲染

    1. const showSpan = true
    2. function App() {
    3. return (
    4. <div className="App">
    5. {/* 逻辑& */}
    6. {showSpan && <span>hellospan>}
    7. {/* 三元表达式 */}
    8. {showSpan ? <span> showSpan为truespan> : <span>showSpan为falsespan>}
    9. div>
    10. );
    11. }

    复杂情况

    用if-else

    1. const type = 1
    2. function getType(){
    3. if(type === 1){
    4. return <div>我是1div>
    5. }else if(type === 2){
    6. return <div>我是2div>
    7. }else{
    8. return <div>我是3div>
    9. }
    10. }
    11. function App() {
    12. return (
    13. <div className="App">
    14. {/* 逻辑& */}
    15. {getType()}
    16. div>
    17. );
    18. }

    三、事件绑定

     on + 事件名称 = { 事件处理程序 },整体上遵循驼峰命名

    1. function App() {
    2. let count = 0
    3. const handleClick = () => {
    4. count ++
    5. console.log('button被点击了'+count)
    6. }
    7. return (
    8. <div className="App">
    9. <button onClick={handleClick}> click button>
    10. div>
    11. );
    12. }

    如果是自定义参数,要写成箭头函数

    <button onClick={() => handleClick(1)}> click button>

    事件对象e和自定义参数都需要

    <button onClick={(e) => handleClick(e, 1)}> click button>

     四、React组件

    在不同的前端框架,组件是通用概念,组件之间可以嵌套也可以复用

    1. const Button = () => {
    2. return <button>Clickbutton>
    3. }
    4. function App() {
    5. return (
    6. <div className="App">
    7. <Button>Button>
    8. <Button/>
    9. div>
    10. );
    11. }

    五、useState

    useState 是一个 React Hook(函数),它允许我们向组件添加一个状态变量, 从而控制影响组件的渲染结果

    即数据驱动视图

    下面是一个典型自增按钮

    1. import { useState } from "react";
    2. function App() {
    3. //count是状态变量, setCount是修改变量的方法 每次修改count必须调用setCount
    4. const [count, setCount] = useState(0)
    5. const handleClick = () => {
    6. setCount(count + 1)
    7. }
    8. return (
    9. <div className="App">
    10. <button onClick={handleClick}>{count}button>
    11. div>
    12. );
    13. }

    react中的状态只读,每次应该通过修改状态的函数来替换,直接修改不能引发视图更新

    修改对象属性

    1. import { useState } from "react";
    2. function App() {
    3. const [student, setStu] = useState({name:'Jack',age:20})
    4. const handleClick2 = () => {
    5. setStu({
    6. ...student, //这一行保留,那么只修改name一个属性,反之原有属性都会被覆盖掉
    7. name:'XiaoMing'
    8. })
    9. console.log(student)
    10. }
    11. return (
    12. <div className="App">
    13. <button onClick={handleClick2}>{student.name}button>
    14. div>
    15. );
    16. }

    六、组件样式处理

    行内样式

    1. const style = {
    2. color:'pink',
    3. fontWeight:'700',
    4. fontSize:'20px'
    5. }
    6. function App() {
    7. return (
    8. <div className="App">
    9. <span style={style}> 11 span>
    10. div>
    11. );
    12. }

    class类名控制

    1. //index.css
    2. .fc-lightblue{
    3. color: lightblue;
    4. }
    5. //index.js
    6. import './index.css'
    7. function App() {
    8. return (
    9. <div className="App">
    10. <span className='fc-lightblue'> 11 span>
    11. div>
    12. );
    13. }

    案例应用

    lodash数组排序

    Lodash Documentation

    npm i lodash

    1. _.orderBy(collection, [iteratees=[_.identity]], [orders])
    2. //参数分别是 要排序的数组 排序参照属性 排序方法(asc/desc)

    classnames动态控制类名

    npm i classnames

    1. import classNames from 'classnames'
    2. classNames('class1', {class2: type === item.type})}>
    3. {item.text}

  • 相关阅读:
    定时器 | Spring Task 定时器
    N 皇后问题(回溯法)
    【Spring系列】DeferredResult异步处理
    【python】带你采集基金股票数据并作可视化操作
    第九章 持续集成---结束/完结
    网络基础入门
    【LeetCode15. 三数之和】——set型哈希表、双指针法
    【Scala】Scala语法中=>、->、<-与{}、()的使用
    从零搭建云原生技术kubernetes(K8S)环境-通过kubesPhere的AllInOne方式
    大数据知识合集之数据分析模型
  • 原文地址:https://blog.csdn.net/Michelle209/article/details/134508694