React function传递参数

本文详细介绍了在React中如何正确地处理按钮点击事件,包括类组件与函数组件中事件绑定的区别,以及如何传递参数给事件处理函数。

 前言

      rect 不能写  onClick={this.textValue()} 因为我们是在渲染区域进行写的他就会认为要调用     这个函数

  所以你会发现在渲染的时候就被调用了 所以要写成  onClick={this.textValue}

  这样子就只是在onClick上面绑定了一个数值

 当页面进行触发的时候他回去类里面去找这个绑定的数值,发现是个Function 就会执行方法

类组件  但是传参你就会发现没了

解决

 错误

<button onClick={ function(){ this.textValue(this.state.tabs)   }}>你好啊</button>

代码解析

在代码渲染的时候绑定个函数点击的时候先去触发函数然后通过函数进行绑定

错误点 方法调用方法会开启严格模式,在严格模式下就可以用了

正确

<button onClick={() =>{  this.textValue(this.state.tabs)   }}>你好啊</button>

代码解析

将父级的this 绑定到事件上面 这样就可以拿到数据

import React, { useState } from "react";
import { BrowserRouter, Route, Routes,Link,Outlet,useNavigate} from "react-router-dom"
// import WitRouter from "../../router/witRouter"
import  {gou} from '../../App'
import { Badge, TabBar } from 'antd-mobile'
import News from '../News/index'
import {
    AppOutline,
    MessageOutline,
    MessageFill,
    UnorderedListOutline,
    UserOutline,
} from 'antd-mobile-icons'
export  default  class Home extends  React.Component{
    // navigate = useNavigate();
    GoNews =  () => {
          gou()
        // WitRouter("cityList","张三")
        console.log(this)
        // this.props
        // this.navigconsate("cityList")
    }
    textValue(){

    }
    state = {
           tabs :[
            {
                key: 'home',
                title: '首页',
                icon: () =>  <AppOutline />,
                badge: Badge.dot,
            },
            {
                key: 'cityList',
                title: '找房',
                icon: () =>  <UnorderedListOutline /> ,
                badge: '5',
            },
            {
                key: 'message',
                title: '咨询',
                icon: (active) =>
                    active ? <MessageFill /> : <MessageOutline />,
                badge: '99+',
            },
            {
                key: 'personalCenter',
                title: '我的',
                icon: () =>  <UserOutline />,
            },
        ]
    }
    textValue = (value) =>{
         console.log(value)

    }
    setActiveKey = (event) =>{
           let value = "赵峰"
           gou(event,value)
    }
    render() {
        console.log(this.state)
        return <div>主页组件
              <Link to="/home/news">首页</Link>
                <button onClick={ function(){ this.textValue(this.state.tabs)   }}>你好啊</button>
                <button onClick={() =>{  this.textValue(this.state.tabs)   }}>你好啊</button>
                <button onClick={this.GoNews}>点击进行跳转</button>
                <TabBar onChange={this.setActiveKey}>
                    {this.state.tabs.map(item => (
                        <TabBar.Item key={item.key} icon={item.icon} title={item.title} />
                    ))}
                </TabBar>
                {/*<TabBar activeKey={activeKey} onChange={setActiveKey}>*/}
                {/*    {this.state.tabs.map(item => (*/}
                {/*        <TabBar.Item key={item.key} icon={item.icon} title={item.title} />*/}
                {/*    ))}*/}
                {/*</TabBar>*/}



                {/*<TabBar safeArea>*/}
                {/*    {this.state.tabs.map(item => (*/}
                {/*        <TabBar.Item key={item.key} icon={item.icon} title={item.title} />*/}
                {/*    ))}*/}
                {/*</TabBar>*/}

              <Outlet></Outlet>
        </div>
    }
}

函数组件

嘿嘿》》》》 这个时候

第一个模式就可以用了

<button onClick={ function(){ textValue( tabs) }}>你好啊</button>

为啥呐这个是因为在函数里面不存在this 也就是说就算你用箭头函数,或者bind 这些都不能用了

 但是函数的组件是全局的可以过原型链从调用的那层找到最外层为止

import React  from "react";
import { useLocation } from 'react-router-dom'
import  classes from './index.module.css'
import Textconst  from '../../Textcontext/textcontext'
import News from "../News";
import {render} from "react-dom";
export  default function CityList  () {

    React.useEffect( ()=>{
            return () => {
                  // 销毁函数
            }
    },[])
    // useEffect  = componentUnMount componentDidMount ComponentDidUpdate
    // 检测函数
    let [age,setAge]  = React.useState(10)
    const refcity  = React.useRef()
    const a =  useLocation()
    const chengName  = function(event) {
      console.log("??????????")
        console.log(event)
        // console.log(refcity,":cdslvdsjvkldjsiv")
    }
    const Changevalue = function () {
                        setAge("20")
    }
    return (
        <Textconst.Consumer>
            { (value) =>{ return <div>
                <div ref={refcity}>
                    {value.name}</div>

                <div value={age} onClick={ () => {  chengName(age)}}>"改变数据的值"</div>
                <span value={age}>"姓名:"{age}</span>
                <span value={age}>"姓名:"</span>
                <div></div>
                <div></div>

                <div className={classes.BuColor} onClick={Changevalue}>"kkkk"</div>
                    <button className={classes.BuColor} onClick={chengNam => { return "value"} }>城市选择页面</button>
                    <News age={age}></News>
                </div>
                 }
            }

        </Textconst.Consumer>
            );
}
// export default class CityList extends React.Component {
//
//      componentDidMount() {
//          let Cetvalue = function(){
//               let a =  useLocation()
//              return  (a)
//          }
//          console.log(Cetvalue())
//          // console.log(useLocation())
//
//      }
//
//     render() {
//          return <div>城市选择页面</div>
//      }
// }

 多说一句:react 跟写差不多原生的,原生有个方法 event  ,

   js function 关于 ( ),如果你不写()js 会进行默认传参 如果写了()就会用你的自定义传参

 

 

  

  

React hooks 可以通过两种方式传递参数: 1. 使用 useState hook useState hook 可以接收一个初始值参数,这个参数可以是任何类型的值,包括对象和数组。例如,以下代码展示了如何使用 useState hook 创建一个计数器: ``` import React, { useState } from 'react'; function Counter({ initialCount }) { const [count, setCount] = useState(initialCount); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); } export default Counter; ``` 在这个例子中,我们使用 initialCount 参数来初始化计数器的值,然后将其传递给 useState hook。 2. 使用 useContext hook useContext hook 可以让我们在组件之间共享数据,从而避免 props 层层传递的问题。例如,以下代码展示了如何使用 useContext hook 在组件之间共享数据: ``` import React, { useContext } from 'react'; const MyContext = React.createContext(); function ParentComponent({ someValue }) { return ( <MyContext.Provider value={someValue}> <ChildComponent /> </MyContext.Provider> ); } function ChildComponent() { const someValue = useContext(MyContext); return <p>Some value: {someValue}</p>; } export default ParentComponent; ``` 在这个例子中,我们创建了一个 MyContext 对象,并将其传递给 Provider 组件。然后,在 ChildComponent 组件中,我们使用 useContext hook 获取 MyContext 对象中的值。这个值可以是任何类型的数据,包括函数和对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值