所有分类
  • 所有分类
  • 后端开发
React 组件开发实战经验分享:从理解到应用

React 组件开发实战经验分享:从理解到应用

这次给大家带来React组件的使用详解,使用React组件的注意事项有哪些,下面就是实战案例,一起来看一下。基于类的组件如果你了解某些库,比如mobx,你就可以使用上例的方式来修饰类组件。装饰器就是把类组件作为一个参数传入了一个方法。方法组

聊聊React!开始搞组件这事儿,真的头大得很呐。别慌,这个帖子里我会分享一些我自己的理解和实战经验,遇到啥问题,学到哪些新东西,都会跟大家唠唠。记得好好看看,说不定对你也有用。要是你有啥好主意或者建议,就快分享给我~

基于类的组件的使用

编程的话,咱们还是多用类组件!每回导入新东西别忘留空格标边界,看起来整洁点儿。弄完组件记得在构造函数设定状态,这样代码看得明白些。别忘了类头上那个exportdefault,这说明组件可以导出使用~

import React, { Component } from 'react';
import { observer } from 'mobx-react';
import ExpandableForm from './ExpandableForm';
import './styles/ProfileContainer.css';

使用prop-types进行类型检查

import React, { Component } from 'react'
import { observer } from 'mobx-react'
import ExpandableForm from './ExpandableForm'
import './styles/ProfileContainer.css'
export default class ProfileContainer extends Component {
 state = { expanded: false }

用到了React15.3.0或以上的话,记得把以前的React.PropTypes换成新的prop-types哟。这个新玩意好用又简单,而且可以帮忙确保我们在组件里面传递参数不会出错。讲到给孩子们(子组件)传递东西,这可得小心,特别是看看“我”(this)指向对不对。通常情况下,使用bind方法就好。

import React, { Component } from 'react'
import { observer } from 'mobx-react'
import { string, object } from 'prop-types'
import ExpandableForm from './ExpandableForm'
import './styles/ProfileContainer.css'
export default class ProfileContainer extends Component {
 state = { expanded: false }
 
 static propTypes = {
  model: object.isRequired,
  title: string
 }
 
 static defaultProps = {
  model: {
   id: 0
  },
  title: 'Your Name'
 }
 // ...
}

处理setState的异步特性

React,它偷偷摸摸把你的好几次State变动合在一起搞成一次了,效率那叫一个高!不过得注意State变了可不是马上就能用上的哟。所以,咱怎么才能拿到最新鲜的State?别担心,超级简单!你只需把之前的State值封装起来变成个函数当参数传给setState就得了。

import React, { Component } from 'react'
import { observer } from 'mobx-react'
import { string, object } from 'prop-types'
import ExpandableForm from './ExpandableForm'
import './styles/ProfileContainer.css'
export default class ProfileContainer extends Component {
 state = { expanded: false }
 
 static propTypes = {
  model: object.isRequired,
  title: string
 }
 
 static defaultProps = {
  model: {
   id: 0
  },
  title: 'Your Name'
 }
 handleSubmit = (e) => {
  e.preventDefault()
  this.props.model.save()
 }
 
 handleNameChange = (e) => {
  this.props.model.changeName(e.target.value)
 }
 
 handleExpand = (e) => {
  e.preventDefault()
  this.setState({ expanded: !this.state.expanded })
 }
 // ...
}

使用装饰器优化组件

你听说过MobX这个玩意儿吗?用这家伙给类组件装修下,控制和观察起来方便多了但得留个心眼!要是input本身就出自React组件之手,可能会意外地自动刷新喔。

this.setState({ expanded: !this.state.expanded });

处理一致性检验的问题

React 组件开发实战经验分享:从理解到应用

用React做唯一性的检查真挺费时的。别慌,咱加点函数就搞定了!这样代码更清爽,也好修。像这类小部件,基本上没啥状态、属性或者方法。

使用默认参数作为默认props

this.setState(prevState => ({ expanded: !prevState.expanded }))

用React写代码,别忘了给参数赋个默认值,这样看起来舒服些!Babel弄好后,连那些没名字的函数也能用啦~不过要是Babel搞砸了,那可得费点劲儿。

import React, { Component } from 'react'
import { observer } from 'mobx-react'
import { string, object } from 'prop-types'
import ExpandableForm from './ExpandableForm'
import './styles/ProfileContainer.css'
export default class ProfileContainer extends Component {
 state = { expanded: false }
 
 static propTypes = {
  model: object.isRequired,
  title: string
 }
 
 static defaultProps = {
  model: {
   id: 0
  },
  title: 'Your Name'
 }
 handleSubmit = (e) => {
  e.preventDefault()
  this.props.model.save()
 }
 
 handleNameChange = (e) => {
  this.props.model.changeName(e.target.value)
 }
 
 handleExpand = (e) => {
  e.preventDefault()
  this.setState(prevState => ({ expanded: !prevState.expanded }))
 }
 
 render() {
  const {
   model,
   title
  } = this.props
  return ( 
   
    

     

{title}

                 )  } }

方法组件的局限性

@observer
export default class ProfileContainer extends Component {

虽然咱们不能直接装修,但这个小东西还能当个传声筒,把数值告诉别人。就算灵活性差了点也没事儿,关键是要设计巧妙点儿,照样可以做出既好用又好保养的零件哈~

实战案例分析

做项目的时候,我觉得用组件有点儿费劲,要提速,传数据得流畅,还要方便维护。搞定这几个难题以后,我对React也就更熟了点儿。

class ProfileContainer extends Component {
 // Component code
}
export default observer(ProfileContainer)

总结与展望

 { model.name = e.target.value }}
 // ^ Not this. Use the below:
 onChange={this.handleChange}
 placeholder="Your Name"/>

React组件真的好理解多了,实战演练看得让人大开眼界。React越来越厉害,组件也简单好用了不少。希望我的分享能对大家有所帮助,使你们用React得心应手。最后,有没有谁用React组件遇到了什么麻烦事?快来评论区分享下经验。别忘了给我点赞让更多小伙伴看到~

原文链接:https://www.icz.com/technicalinformation/web/2024/06/17118.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?