react-----子组件使用父组件的方法,然后改变父组件的状态

很多时候,正在进行react父子通信的时候,应该是将父子组件的纯洁度保持上去,子组件不能在本身去修改父组件的方法,而是应该使用父组件自己的方法去修改本身的状态。
那么这里会遇到一个问题,就是当需要传递参数的时候,比如某一个激活项。

(1)使用bind改变this的方式
在父组件中:

constructor(props){
        super()
        this.state={
            activeTab:'0',//默认的激活项tab
        }
        this.handleClickTab = this.handleClickTab.bind(this)
    }
handleClickTab(data){
       const {activeTab} = this.state
       if(data == activeTab) return
       this.setState({
           activeTab:data
       })
 }
  render(){
      const {pathKey,tabsTitlte,tabsTitlte2,activeTab} = this.state
      return (
          <div>
             <Tabscm tabs={tabsTitlte} active={activeTab} handleClick={this.handleClickTab} />
          </div>
      )
  }

子组件

import React from 'react'
import styles from './index.less'


const Tabscm=(props)=>{
    const {tabs,handleClick,active} = props
    return(
        <div className='tabsbox'>{tabs.map((item,i)=>{
            return (<span key={i} className={`tabsbox-item ${i==active?'active':''}`} 
            		onClick={()=>{handleClick(i)}}>{item.title}</span>)
        })}</div>
    )
}

export default Tabscm;

(1)使用匿名函数的方式
父组件

    handleClickTab=(data)=>{
        const {activeTab} = this.state
        if(data == activeTab) return
        this.setState({
            activeTab:data
        })
    }
    render(){
        const {pathKey,tabsTitlte,tabsTitlte2,activeTab} = this.state
        return (
            <div>
            		<Tabscm tabs={tabsTitlte} active={activeTab} handleClick={(data)=>{
                        this.handleClickTab(data)
                    }} />
            </div>
        )
    }

在使用匿名函数的时候,参数需要从外层的匿名函数到里层的匿名函数。不然娶不到在子组件中传给父组件的参数
总结:使用bind改变this的方式更为简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中,组件组件传递需要使用回调函数。具体实现步骤如下: 1. 在组件中定义一个处理组件的函数,该函数作为props传递给组件。 ```typescript interface Props { onChildValueChange: (value: string) => void; } export const Parent: React.FC<Props> = ({onChildValueChange}) => { return ( <div> <Child onValueChange={onChildValueChange} /> </div> ); }; ``` 2. 在组件中定义一个处理改变的函数,并在改变调用组件传递的回调函数。 ```typescript interface Props { onValueChange: (value: string) => void; } export const Child: React.FC<Props> = ({onValueChange}) => { const [value, setValue] = useState(''); const handleValueChange = (event: React.ChangeEvent<HTMLInputElement>) => { const newValue = event.target.value; setValue(newValue); onValueChange(newValue); }; return ( <div> <input type="text" value={value} onChange={handleValueChange} /> </div> ); }; ``` 在上面的代码中,当组件中的input改变时,会调用handleValueChange函数,该函数会更新组件的value,并调用组件传递的回调函数onValueChange,将新的value传递给组件。 3. 在组件中实现处理组件传递的函数。 ```typescript const handleChildValueChange = (value: string) => { console.log(`Child value changed to ${value}`); }; ``` 4. 将处理组件传递的函数作为props传递给组件。 ```typescript <Parent onChildValueChange={handleChildValueChange} /> ``` 这样组件就可以向组件传递了。当组件改变时,会调用组件传递的回调函数,并将新的传递给组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值