React学习分享(一)

一、JSX语法

JSX 将 HTML 语法直接加入到 JavaScript 代码中,再通过翻译器转换到纯 JavaScript 后由浏览器执行。 在实际开发中,JSX 在产品打包阶段都已经编译成纯 JavaScript,不会带来任何副作用,反而会让代码 更加直观并易于维护。 编译过程由Babel 的 JSX 编译器实现。
在react18之前的写法是:

import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component {
    render() {
        return (
            <div>11111
                <ul>
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                </ul>
                <div>asdad</div>
            </div>
        )
    }
}

ReactDOM.render(<App />, document.getElementById("root"))

但是我们在使用react18版本会提示我们这样的报错

Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until you switch to the new API, your app will behave as if it's running React 17. Learn more: https://reactjs.org/link/switch-to-createroot

所以我们需要改写成:

import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));

class App extends React.Component {
    render() {
        return (
            <div>11111
                <ul>
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                </ul>
                <div>asdad</div>
            </div>
        )
    }
}
root.render(<App />)

关于如何VScode在jSX里面能够打出html的标签,我们只需要配置(这五步即可):
请添加图片描述

请添加图片描述

二、类组件和函数组件

ES6的加入让JavaScript直接支持使用class来定义一个类,react创建组件的方式就是使用的类的继承, ES6 class 是目前官方推荐的使用方式,它使用了ES6标准语法来构建,看以下代码:
这里是向外暴露了一个Header类组件(01class.js)

import React, { Component } from 'react'
export default class Header extends Component {
    render() {
        return (
            <div>
                <div>我是头部</div>
            </div>
        )
    }
}

这里是向外暴露了一个Body函数组件(02function.js)

const Body = () => {
    return (
        <div>我是身体内容</div>
    )
}
export default Body

之后我们只需要在根组件index.js中引入即可使用 (注意组件的名必须开头大写,否则会报错)

import React from 'react'
import { createRoot } from 'react-dom/client';

import Header from './01class'
import Body from './02function'

const root = createRoot(document.getElementById('root'));
class App extends React.Component {
    render() {
        return (
            <div>
                <ul>
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                </ul>
                <div>asdad</div>
                <Header></Header>
                <Body></Body>
            </div>
        )
    }
}
root.render(<App />)

函数式组件与类组件的不同:
函数式组件也叫无状态组件,在16.8之前是没有状态的,但是在16.8之后引入了react hooks就可以写状态了。类组件就可以写状态和属性。

三、组件内的样式

首先我们需要了解给虚拟dom添加变量属性,需要使用表达式传入{ }的方式来实现:

import React, { Component } from 'react'
export default class App extends Component {
    render() {
        const name = "zhangsan"
        const a = 8
        const b = 9
        return (
            <div>
                {10 + 20} -- {name}
                <div>
                    {a > b ? "aaa" : "bbb"}
                </div>
            </div>
        )
    }
}

需注意里面必须是表达式写法。
可以先定义一个对象的形式来实现:

import React, { Component } from 'react'
export default class App extends Component {
    render() {
        const name = "zhangsan"
        const a = 8
        const b = 9
        const obj = {
            //驼峰式命名
            backgroundColor: "red"
        }
        return (
            <div>
                {10 + 20} -- {name}
                <div>
                    {a > b ? "aaa" : "bbb"}
                </div>
                {/* 注意{ }不能删去 */}
                <p style={obj}>2222222222222222</p>
            </div >
        )
    }
}

给虚拟dom添加行内样式,需要使用表达式传入样式对象的方式来实现:

{/* 注意这里的两个括号,第一个表示我们在要JSX里插入JS了,第二个是对象的括号 */}
<p style={{ color: 'red', fontSize: '14px' }}>1111111111111111111</p>

class写法:
React推荐我们使用行内样式,因为React觉得每一个组件都是一个独立的整体,我们大多数情况下还是大量的在为元素添加类名,但是需要注意的是, class 需要写成 className (因为毕竟是在写类js代码,会收到js规则的现在,而 class 是关键字)
补充:(class ==> className , for ==> htmlFor(label))

import React, { Component } from 'react'
import './css/01index.css'
export default class App extends Component {
    render() {
        const name = "zhangsan"
        const a = 8
        const b = 9
        const obj = {
            backgroundColor: "red"
        }
        return (
            <div>
                {10 + 20} -- {name}
                <div>
                    {a > b ? "aaa" : "bbb"}
                </div>
                <p className='active'>333333333333333</p>
            </div >
        )
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值