从0到1教你学会 react,web前端开发h5

return (

{arr}

);

}

export default App;

数组里边的项为对象时可以作以下修改

const arr = [

{

id: 0,

name: ‘GD’,

age: 18

},

{

id: 1,

name: ‘XGD’,

age: 8

}

];

function App() {

const str = arr.map(item => {

return (

  • {item.name}

    {item.age}

    )

    })

    return

    • {str}

    }

    export default App;

    JSX 添加内联样式


    1. 设置样式的时候,应该将键值对放置于 {}

    const styleObj = {

    width: 100,

    height: 100,

    backgroundColor: ‘green’

    };

    function App() {

    return

    样式处理2

    }

    export default App;

    1. 内联样式默认无法支持伪类及媒体查询样式设置;如需使用需借助第三方的包帮助 — radium

    2. 导入 Radium 函数将当前需要支持伪类操作的组件包裹之后再导出

    import Radium from ‘radium’

    const styleObj = {

    width: 100,

    height: 100,

    backgroundColor: ‘green’,

    ‘:hover’: {

    backgroundColor: ‘yellow’

    }

    }

    function App() {

    return

    样式处理2

    }

    export default Radium(App);

    1. 通过 Radium 设置媒体查询时,需要将当前组件所渲染的地方使用 StyleRoot 包裹

    import Radium from ‘radium’

    const styleObj = {

    width: 100,

    height: 100,

    backgroundColor: ‘green’,

    “:hover”: {

    backgroundColor: ‘yellow’

    },

    “@media (max-width: 1000px)”: {

    width: 300

    }

    }

    function App() {

    return

    样式处理2

    }

    export default Radium(App);

    import React from ‘react’;

    import ReactDOM from ‘react-dom’;

    import App from ‘./App’;

    import {StyleRoot} from ‘radium’

    ReactDOM.render(

    <React.StrictMode>

    </React.StrictMode>,

    document.getElementById(‘root’)

    );

    1. 案例

    import Radium from ‘radium’

    const ButtonStyle = {

    base: {

    width: 150,

    height: 40,

    fontSize: 20,

    background: ‘#ffff’

    },

    login: {

    background: ‘green’

    },

    logout: {

    background: ‘orange’

    }

    }

    const isLogin = false

    function App() {

    return

    <button style={[

    ButtonStyle.base,

    isLogin ? ButtonStyle.login : ButtonStyle.logout

    ]}>按钮

    }

    export default Radium(App);

    JSX 添加外联样式


    1. 全局外联样式

    2. 所有组件当中都可以直接进行使用

    3. 再添加 class 时,需要使用 className

    // App.js

    function App() {

    return <div className={‘box’}>

    外联样式

    }

    export default App;

    // Test,js

    import React from ‘react’

    function Test () {

    return <div className={‘box’}>Test.js

    }

    export default Test

    // index.js

    import React from ‘react’;

    import ReactDOM from ‘react-dom’;

    import App from ‘./App’;

    import Test from ‘./test’

    import ‘./style.css’

    ReactDOM.render(

    <React.StrictMode>

    </React.StrictMode>,

    document.getElementById(‘root’)

    );

    1. 组件级别的外联样式

    2. 只有某一个组件可以进行使用

    3. 组件名.module.css

    // Test.module.css

    .item {

    background-color: red;

    width: 200px;

    height: 200px;

    }

    // test.js

    import React from ‘react’

    import style from ‘./Test.module.css’

    function Test () {

    return (

    Test.js

    这里使用了自己的样式

    )

    }

    export default Test

    1. 借助第三方工具在 JS 中编写 CSS

    2. (CSS-IN-JS)

    3. npm i styled-components

    import React from ‘react’

    import style from ‘./Test.module.css’

    import styled from ‘styled-components’

    // 自定义标签

    const SectionDiv = styled.div.attrs({

    className: ‘box1 box2’

    })`

    width: 100px;

    height: 100px;

    background-color: pink;

    `

    function Test () {

    return (

    Test.js

    这里使用了自己的样式

    )

    }

    export default Test

    组件的创建

    ===============================================================

    创建函数式组件


    function App() {

    return

    我就是函数式组件

    }

    export default App;

    创建类式组件


    1. 必须继承 Compnent

    2. 必须实例化 render

    3. 组件名称首字母必须大写,在 React 中可以用于区分组件和普通的标记

    import React, {Component} from ‘react’

    class About extends Component {

    render () {

    return (

    我是类式组件

    )

    }

    }

    export default About

    1. 必须有且只能有一个根元素,同时支持占位符(两种方式)

    import React, {Component, Fragment} from ‘react’

    class About extends Component {

    render () {

    return (

    // 方式一

    我是类式组件

    // 方式二

    <>我是类式组件</>

    )

    }

    }

    export default About

    组件传参

    ==============================================================

    函数式组件传参


    在函数组件内可以接到外部的数据,内部直接访问即可

    import About from ‘./About’

    function App() {

    return

    <About name={‘GD’} age={100}/>

    }

    export default App;

    // About.js

    import React from ‘react’

    function About(props) {

    console.log(props);

    return (

    {props.a}

    {props.b}

    )

    }

    export default About

    import About from ‘./About’

    const obj = {

    name: ‘rookie’,

    age: 18

    }

    function App() {

    return

    <About {…obj}/>

    }

    export default App;

    // About.js

    import React from ‘react’

    function About({name, age}) {

    return (

    {name}

    {age}

    )

    }

    export default About

    类式组件传参


    类式组件内部的内部存在一个 props属性,外部传递的数据都放在这里保存,我们可以直接进行使用

    import Header from ‘./Header’

    function App() {

    return

    }

    export default App;

    // Header.js

    import React, { Component } from ‘react’

    class Header extends Component {

    render() {

    return (

    {this.props.name}

    {this.props.age}

    )

    }

    }

    export default Header

    import About from ‘./About’

    const obj = {

    name: ‘rookie’,

    age: 18

    }

    function App() {

    return

    }

    export default App;

    // Header.js

    import React, { Component } from ‘react’

    class Header extends Component {

    render() {

    const {name, age} = this.props

    return (

    {name}

    {age}

    )

    }

    }

    export default Header

    组件设置默认值及类型校验


    1. 针对于函数组件来说,如果想要设置默认的 props 属性值,则直接通过 组件名称.defaultProps 来设置一个对象

    2. 针对于类组件来说,我们可以直接定义 static defaultProps 来管理需要设置默认值的属性即可

    为什么要对 props 中的属性进行校验

    JS 本身是弱类型语言,它里边的参数或者方法,在定义形参的时候我们没有办法直接对类型进行设置,这时候对于我们的使用来说有利有弊,比如说我这里的参数需要接受一个 number 类型的,但是传入的却是 string 类型的,那么一定会影响后续逻辑代码的实现,所以需要类型校验

    import About from ‘./About’

    function App() {

    return

    }

    export default App;

    // App.js

    import React from ‘react’

    import PropTypes from “prop-types”;

    function About({name, age}) {

    return (

    {name}

    {age}

    )

    }

    About.defaultProps = {

    name: 111,

    age: 188

    }

    About.propTypes = {

    name: PropTypes.string

    }

    export default About

    函数式组件设置默认值

    import About from ‘./About’

    function App() {

    return

    }

    export default App;

    // About.js

    import React from ‘react’

    function About({name, age}) {

    return (

    {name}

    {age}

    )

    }

    About.defaultProps = {

    name: ‘dgd’,

    age: 188

    }

    export default About

    类式组件设置默认值

    import Header from ‘./Header’

    const obj = {

    name: ‘rookie’,

    age: 18

    function App() {

    return

    }

    export default App;

    // Header.js

    import React, { Component } from ‘react’

    class Header extends Component {

    static defaultProps = {

    name: ‘拉勾’,

    age: 3

    }

    render() {

    const {name, age} = this.props

    return (

    {name}

    {age}

    )

    }

    }

    export default Header

    向组件传递 JSX


    类组件传递 JSX

    import Header from ‘./Header’

    function App() {

    return

    Header 中的 P 标签

    }

    export default App;

    // Header.js

    import React, { Component } from ‘react’

    class Header extends Component {

    render() {

    return (

    {this.props.children}

    )

    }

    }

    export default Header

    函数组件传递 JSX

    import About from ‘./About’

    function App() {

    return

    About 中的 P 标签

    }

    export default App;

    // About.js

    import React from ‘react’

    function About(props) {

    return (

    {props.children}

    )

    }

    export default About

    组件布局实例

    ================================================================

    预期结构图

    在这里插入图片描述

    • header.js

    function Header() {

    return (<div className={“header”}>Header组件)

    }

    export default Header

    • home.js | list.js

    // home.js

    import Layout from ‘./Layout’

    function Home() {

    return (

    当前是 Home 页面

    )

    }

    export default Home

    // list.js

    import Layout from ‘./Layout’

    function List() {

    return (

    当前是 List 页面

    )

    }

    export default List

    • footer.js

    function Footer() {

    return (<div className={“footer”}>Footer组件)

    }

    export default Footer

    • layout.js

    /**

    • 当前组件作用就是将 header 与 footer 显示出来,同时中的 main 内容空出来

    • 将来我们传入什么样的 JSX 那么就显示什么样的 DOM

    */

    import Header from ‘./Header’

    import Footer from ‘./Footer’

    function Layout(props) {

    return(<>

    {props.children}

    </>)

    }

    export default Layout

    • App.js

    import Home from ‘./components/Home’

    import List from ‘./components/List’

    function App() {

    return ()

    }

    export default App;

    • style.css

    html, body {

    height: 100%;

    }

    body {

    margin: 0;

    padding: 0;

    }

    .header, .footer {

    width: 100%;

    height: 80px;

    position: absolute;

    left: 0;

    line-height: 80px;

    text-align: center;

    font-size: 18px;

    color: #fff;

    }

    .header {

    background-color: skyblue;

    top: 0;

    }

    .footer {

    background-color: purple;

    bottom: 0;

    }

    .main {

    width: 100%;

    position: absolute;

    top: 80px;

    bottom: 80px;

    padding: 20px 0;

    text-align: center;

    background: khaki;

    }

    • 案例效果

    在这里插入图片描述

    组件状态

    ==============================================================

    • 组件状态

    • 状态就是数据,因此组件状态指的就是某一个组件自己的数据

    • 数据驱动 DOM

    • 当我们修改某一个数据的时候,界面上的 DOM 中数据展示也会自动更新

    • 组件状态管理

    import React, {Component} from ‘react’

    class Header extends Component {

    // 在类组件当中默认就存在一个 state 属性,他是一个对象,可以用于保存当前组件的数据

    // 还可以通过 setState 方法来修改数据的值,最后修改之后的状态会自动展示在 DOM 上

    state = {

    name: ‘xgd’,

    age: 18

    }

    handler = () => {

    // 在 react 当中是不能够直接来修改 state 值得

    this.setState({

    name: ‘xxxgd’

    })

    }

    render () {

    return (<>

    {this.state.name}

    {this.state.age}

    点击更改

    </>)

    }

    }

    export default Header

    setState 使用细节


    setState 是异步函数

    • 使用 async…await 解决

    • 调用 setState 的时候可以传入回调函数,在它里边就可以使用修改之后的数据

    // 方法1

    class Header extends Component {

    state = {

    name: ‘xgd’,

    age: 18

    }

    handler = async () => {

    await this.setState({

    name: ‘xxxgd’

    })

    console.log(this.state.name)

    }

    }

    // 方法2

    class Header extends Component {

    state = {

    name: ‘xgd’,

    age: 18

    }

    handler = () => {

    this.setState({

    name: ‘xxxgd’

    }, () => {

    console.log(this.state.name, 222)

    })

    console.log(this.state.name, 111)

    }

    }

    setState 在使用的时候除了可以传入对象之外还能够传入一个函数

    class Header extends Component {

    state = {

    count: 0

    }

    handler = () => {

    this.setState((state)=> ({

    小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
    因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    img
    img
    img
    img

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

    如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
    img

    最后

    本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

    前端视频资料:

    setState 是异步函数

    • 使用 async…await 解决

    • 调用 setState 的时候可以传入回调函数,在它里边就可以使用修改之后的数据

    // 方法1

    class Header extends Component {

    state = {

    name: ‘xgd’,

    age: 18

    }

    handler = async () => {

    await this.setState({

    name: ‘xxxgd’

    })

    console.log(this.state.name)

    }

    }

    // 方法2

    class Header extends Component {

    state = {

    name: ‘xgd’,

    age: 18

    }

    handler = () => {

    this.setState({

    name: ‘xxxgd’

    }, () => {

    console.log(this.state.name, 222)

    })

    console.log(this.state.name, 111)

    }

    }

    setState 在使用的时候除了可以传入对象之外还能够传入一个函数

    class Header extends Component {

    state = {

    count: 0

    }

    handler = () => {

    this.setState((state)=> ({

    小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
    因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    [外链图片转存中…(img-eg6vOFeC-1710712790978)]
    [外链图片转存中…(img-OrH78M8h-1710712790979)]
    [外链图片转存中…(img-7ARaE9jd-1710712790979)]
    [外链图片转存中…(img-oPzRVRcK-1710712790980)]

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

    如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
    [外链图片转存中…(img-ib15YG0b-1710712790980)]

    最后

    本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

    [外链图片转存中…(img-tPKfXYCT-1710712790980)]

    前端视频资料:

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值