当前位置:   article > 正文

Web前端入门,【React入门必备知识篇02,一线大厂架构师都推荐的前端零基础大全

Web前端入门,【React入门必备知识篇02,一线大厂架构师都推荐的前端零基础大全
  • React讲state与表单元素值value绑定在一起,由state的值来控制表单元素的值;

  • 受控组件:值受到react控制的表单元素

步骤及示例代码演示如下:

  1. 在 state 中添加一个状态,作为表单元素的value值(控制表单元素值的来源);

  2. 给表单元素绑定 change 事件,将 表单元素的值 设置为 state 的值(控制表单元素值的变化);

import React from ‘react’

import ReactDOM from ‘react-dom’

/*

受控组件:其值受到React控制的表单元素

操作文本框的值:

*/

class App extends React.Component {

state = {

txt: ‘’

}

handleChange = e => {

this.setState({

txt: e.target.value

})

}

render() {

return (

/* 把state的值设置给输入框的value,绑定change事件,这样用户在输入内容的时候

调用相应函数,在函数里面把当前设置的值赋值给state,从而达到数据的统一 */

)

}

}

// 渲染组件

ReactDOM.render(, document.getElementById(‘root’))

7.1.1 受控组件示例

文本框、富文本框、下拉框、复选框

完整代码演示如下:

import React from ‘react’

import ReactDOM from ‘react-dom’

/*

受控组件示例

*/

class App extends React.Component {

state = {

txt: ‘’,

content: ‘’,

city: ‘bj’,

isChecked: false

}

handleChange = e => {

this.setState({

txt: e.target.value

})

}

// 处理富文本框的变化

handleContent = e => {

this.setState({

content: e.target.value

})

}

// 处理下拉框的变化

handleCity = e => {

this.setState({

city: e.target.value

})

}

// 处理复选框的变化

handleChecked = e => {

this.setState({

isChecked: e.target.checked

})

}

render() {

return (

{/* 文本框 */}


{/* 富文本框 */}


{/* 下拉框 */}

上海 北京 广州

{/* 复选框 */}

)

}

}

// 渲染组件

ReactDOM.render(, document.getElementById(‘root’))

7.1.2 多表单元素优化

多表单元素优化:

  • 问题:每个表单元素都有一个单独的事件处理程序处理太繁琐;

  • 优化:使用一个事件处理程序同时处理多个表单元素;

多表单元素优化步骤:

  1. 给表单元素添加name属性,名称与 state 相同;

  2. 根据表单元素类型获取对应值;

  3. 在 change 事件处理程序中通过 [name] 来修改对应的state;

完整代码演示如下:

import React from ‘react’

import ReactDOM from ‘react-dom’

/*

受控组件示例

*/

class App extends React.Component {

state = {

txt: ‘’,

content: ‘’,

city: ‘bj’,

isChecked: false

}

handleForm = e => {

// 获取当前DOM对象

const target = e.target

// 根据类型获取值

const value = target.type === ‘checkbox’

? target.checked
target.value

// 获取name

const name = target.name

this.setState({

})

}

render() {

return (

{/* 文本框 */}


{/* 富文本框 */}


{/* 下拉框 */}

上海 北京 广州

{/* 复选框 */}

)

}

}

// 渲染组件

ReactDOM.render(, document.getElementById(‘root’))

7.2 非受控组件(了解即可)
  • 说明:借助于ref,使用元素DOM方式获取表单元素值

  • ref的作用:获取DOM或者组件

使用步骤:

  • 调用 React.createRef() 方法创建ref对象;

  • 将创建好的 ref 对象添加到文本框中;

  • 通过ref对象获取到文本框的值;

完整代码演示如下:

import React from ‘react’

import ReactDOM from ‘react-dom’

/*

非受控组件:

*/

class App extends React.Component {

constructor() {

super()

// 1.调用 React.createRef() 方法创建一个 ref 对象

this.txtRef = React.createRef()

}

// 3. 通过 ref 对象获取到文本框的值

getTxt = () => {

console.log(‘文本框值为:’, this.txtRef.current.value);

}

render() {

return (

// 2.将创建好的 ref 对象添加到文本框中

获取文本框的值

)

}

}

// 渲染组件

ReactDOM.render(, document.getElementById(‘root’))

(8)案例分析:评论列表

需求分析:

  1. 渲染评论列表(列表渲染);

  2. 没有评论数据时渲染:暂无评论(条件渲染);

  3. 获取评论信息,包括评论人和评论内容(受控组件);

  4. 发表评论,更新评论列表(setState());

实现步骤:

1️⃣ 渲染评论列表

  1. 在 state 中初始化评论列表数据;

  2. 使用数组的map方法遍历state中的列表数据;

  3. 给每个被遍历的li元素添加key属性;

2️⃣ 渲染暂无评论

  1. 判断列表数据的长度是否为0;

  2. 如果为0,则渲染暂无评论;

3️⃣ 获取评论信息

  1. 使用受控组件方式处理表单元素;

4️⃣ 发表评论

  1. 给按钮绑定单击事件;

  2. 在事件处理程序中,通过state获取评论信息;

  3. 将评论信息添加到state中,并调用 setState() 方法更新state;

  4. 边界情况:清空文本框;

  5. 边界情况:非空判断;

完整代码演示如下:

/* index.css */

.app {

width: 300px;

padding: 10px;

border: 1px solid #999;

}

.user {

width: 100%;

box-sizing: border-box;

margin-bottom: 10px;

}

.content {

width: 100%;

box-sizing: border-box;

margin-bottom: 10px;

}

.no-comment {

text-align: center;

margin-top: 30px;

}

// index.js

import React from ‘react’

import ReactDOM from ‘react-dom’

/*

评论列表案例

*/

import ‘./index.css’

class App extends React.Component {

// 初始化状态

state = {

comments: [

{ id: 1, name: ‘jack’, content: ‘必须支持一波’ },

{ id: 2, name: ‘rose’, content: ‘我又偷偷的过来啦’ },

{ id: 3, name: ‘tom’, content: ‘感谢博主的日常分享’ }

],

// 评论人

userName: ‘’,

// 评论内容:

userContent: ‘’

}

// 渲染评论列表:

renderList() {

const { comments } = this.state

if (comments.length === 0) {

return

暂无评论,快去评论吧~

}

return (

    {comments.map(item => (

    • 评论人:{item.name}

      评论内容:{item.content}

      ))}

      )

      }

      // 处理表单元素值

      handleForm = e => {

      const { name, value } = e.target

      this.setState({

      })

      }

      // 发表评论:

      addComment = () => {

      const { comments, userName, userContent } = this.state

      // 非空校验

      if (userName.trim() === ‘’ || userContent.trim() === ‘’) {

      alert(‘请输入评论人和评论内容’)

      return

      }

      // 将评论信息添加到state中

      const newComments = [

      {

      id: Math.random(),

      name: userName,

      content: userContent

      },

      …comments

      ]

      // 文本框的值如何清空? 要清空文本框只需要将其对应的state清空即可

      this.setState({

      comments: newComments,

      userName: ‘’,

      userContent: ‘’

      })

      }

      render() {

      const { userName, userContent } = this.state

      return (

      <input

      className=“user”

      type=“text”

      placeholder=“请输入评论人”

      value={userName}

      name=“userName”

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

      深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

      因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
      img
      img
      img
      img
      img
      img

      既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

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

      如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
      img

      后话

      对于面试,说几句个人观点。

      面试,说到底是一种考试。正如我们一直批判应试教育脱离教育的本质,为了面试学习技术也脱离了技术的初心。但考试对于人才选拔的有效性是毋庸置疑的,几千年来一直如此。除非你有实力向公司证明你足够优秀,否则,还是得乖乖准备面试。这也并不妨碍你在通过面试之后按自己的方式学习。
      其实在面试准备阶段,个人的收获是很大的,我也认为这是一种不错的学习方式。首先,面试问题大部分基础而且深入,这些是平时工作的基础。就好像我们之前一直不明白学习语文的意义,但它的意义就在每天的谈话间。

      所谓面试造火箭,工作拧螺丝。面试往往有更高的要求,也迫使我们更专心更深入地去学习一些知识,也何尝不是一种好事。

      一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

      AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

      分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

      如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
      [外链图片转存中…(img-HxodOPWd-1712266071627)]

      后话

      对于面试,说几句个人观点。

      面试,说到底是一种考试。正如我们一直批判应试教育脱离教育的本质,为了面试学习技术也脱离了技术的初心。但考试对于人才选拔的有效性是毋庸置疑的,几千年来一直如此。除非你有实力向公司证明你足够优秀,否则,还是得乖乖准备面试。这也并不妨碍你在通过面试之后按自己的方式学习。
      其实在面试准备阶段,个人的收获是很大的,我也认为这是一种不错的学习方式。首先,面试问题大部分基础而且深入,这些是平时工作的基础。就好像我们之前一直不明白学习语文的意义,但它的意义就在每天的谈话间。

      所谓面试造火箭,工作拧螺丝。面试往往有更高的要求,也迫使我们更专心更深入地去学习一些知识,也何尝不是一种好事。

      一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

      AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

    本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/717043
    推荐阅读
    相关标签
      

    闽ICP备14008679号