组件化----组件抽离

功能分析:

在网页上显示两个个姓名及年龄的输入框及一个提交按钮,并让输入框的内容同步到网页上显示;

抽离前

class App extends Component {
  state={name:'Guo努力',age:22}
  //同步数据
  handleChange1=(e)=>{
    this.setState({
      name:e.target.value
    })
  }
  handleChange2=(e)=>{
    this.setState({
      age:e.target.value
    })
  }

  //提交数据
  handleClick=()=>{
    const {name,age}=this.state
    //...
  }
  render() {
    return (
    <div>
      <h1>name:{this.state.name} <br/> age:{this.state.age}</h1>
      name:<input type='text' onChange={this.handleChange1}></input>
      <br/>
      age:<input type='text' onChange={this.handleChange2}></input>
      <br/>
      <button onClick={this.handleClick}>提交</button>
    </div>
    );
  }
}

将各个功能抽离出来,实现组件化

实现方法:

首先在项目中的 src 中定义一个文件夹 store 用来存储 action.js、constant.js、index.js、reducer.js 文件

 

1. App.js 中定义一个 UI ( 传递 props ) 组件用来返回数据

//引入文件
import  *as action from './store/action'

//定义UI组件
function StudentFrom(props) {
  const {name,age,handleChange1,handleChange2,handleClick}=props
  return (
    <div>
      <h1>name:{name} <br/> age:{age}</h1>
      name:<input type='text' onChange={handleChange1}></input>
      <br/>
      age:<input type='text' onChange={handleChange2}></input>
      <br/>
      <button onClick={handleClick}>提交</button>
    </div> 
    );
}

2. App.js 中定义映射数据及方法

//映射数据及方法
const mapStateToProps = state =>({
  name:state.name,
  age:state.age,
})

const mapDispatchTpProps = {
  handleChange1:(e)=>action.nameAction(e.target.value),
  handleChange2:(e)=>action.ageAction(e.target.value),
  handleClick:()=>action.commitAction(),
}

在 action.js 中写入:

//from
export const nameAction = (payload) =>{
    return{
        type:constant.FORM_NAME,
        payload:payload
    }
}
export const ageAction = (payload) =>{
    return{
        type:constant.FORM_AGE,
        payload:payload
    }
}
export const commitAction = () =>{
    return{
        type:constant.FORM_COMMIT
    }
}

在 constant.js 中写入: 

//from
export const FORM_NAME='FORM_NAME'
export const FORM_AGE='FORM_AGE'
export const FORM_COMMIT='FORM_COMMIT'

3. 定义容器组件:

//定义容器组件
const Container = connect (mapStateToProps,mapDispatchToProps)(StudentFrom)

4.将定义的组件挂载到App容器上:

class App extends Component {
  render() {
    return (
    <Provider store={store}>
      <Container/>
    </Provider>
    );
  }
}

在 reducer.js 中写入: 

import *as constant from './constant'

const defaultState={
    name:"",
    age:'',
}

const reducer = (state=defaultState,action)=>{
    let newState = JSON.parse(JSON.stringify(state))
    switch (action.type) {
        case constant.FORM_NAME:      
            newState.name=action.payload
            return newState
        case constant.FORM_AGE:
            newState.age=action.payload
            return newState
        case constant.FORM_COMMIT:
            // const {name,age}=state
            return {mage:'ok',result:1}
        default:
            return state
    }
}

export default reducer

在 index.js 中写入: 

import {createStore} from 'redux'
import reducer from './reducer.js'


const store =createStore(reducer)

export default store

 抽离后:

 这样......我们就可以实现组件化..................

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 的组件开发是 Vue 的核心特性之一,它可以将一个大型应用程序拆分成多个小组件,每个组件都具有自己的状态和行为,可以独立开发、测试和维护。Vue 的组件开发主要依赖以下几个技术: 1. 单文件组件:Vue 提供了单文件组件的机制,可以将一个组件的 HTML、CSS 和 JavaScript 代码放在一个文件中进行管理,便于组件的开发和维护。 2. Prop:Prop 是 Vue 组件之间进行数据传递的机制,可以将父组件的数据传递给子组件,子组件通过 Props 接收数据,并且可以进行验证和默认值设置。 3. Slot:Slot 是 Vue 组件之间进行内容分发的机制,可以将父组件的内容插入到子组件中指定的位置,实现组件的复用和灵活性。 4. Event:Event 是 Vue 组件之间进行通信的机制,可以在子组件中触发自定义事件并传递数据,父组件通过监听事件来获取子组件的数据。 5. Mixin:Mixin 是 Vue 组件之间进行代码复用的机制,可以将多个组件共用的逻辑抽离出来,封装成 Mixin 并混入到组件中,避免代码的重复编写。 6. Provide/Inject:Provide/Inject 是 Vue 组件之间进行依赖注入的机制,可以将一个组件的数据或方法注入到所有子孙组件中,避免了多层组件之间的 Props 传递。 以上技术是 Vue 组件开发的常用技术,掌握这些技术可以提高组件的开发效率和代码质量。在实际开发中,我们可以根据具体需求合理使用这些技术,以实现组件的复用、灵活性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值