最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀react的onClick自動(dòng)觸發(fā)等相關(guān)問(wèn)題

 更新時(shí)間:2023年02月12日 14:39:53   作者:猜測(cè)7  
這篇文章主要介紹了解讀react的onClick自動(dòng)觸發(fā)等相關(guān)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

react的onClick自動(dòng)觸發(fā)等問(wèn)題

react分頁(yè)組件遇到的問(wèn)題:

? private getFirst() {
? ? const { pageNo } = this.state;
? ? if (pageNo > 3) {
? ? ? return (<span onClick={this.changePage(1)}>首頁(yè)</span>);
? ? } else {
? ? ? return;
? ? }
? }
? private changePage (index: number) {
? ? this.setState({ pageNo: index });
? }

這段代碼的onClick直接報(bào)錯(cuò):不能將類型“void”分配給類型“((event: MouseEvent<HTMLSpanElement>) => void) | undefined”,這個(gè)報(bào)錯(cuò)看得我莫名其妙……

同事告訴我要給changePage函數(shù)加個(gè)return ()=>{}形成閉包。其實(shí)后來(lái)我才發(fā)現(xiàn),雖然changePage寫(xiě)得很像function,但其只是一個(gè)變量而已,所以并不滿足onClick的內(nèi)容是方法的情況。

? private getFirst() {
? ? const { pageNo } = this.state;
? ? if (pageNo > 3) {
? ? ? return (<span onClick={this.changePage(1)}>首頁(yè)</span>);
? ? } else {
? ? ? return;
? ? }
? }
?
? private changePage (index: number) {
? ? return () => {this.setState({ pageNo: index });}
? }

這樣寫(xiě)雖然不報(bào)錯(cuò),但有個(gè)嚴(yán)重的問(wèn)題,每次生成UI時(shí)它都會(huì)自動(dòng)觸發(fā)onClick,這個(gè)機(jī)制真是???……所以最后改成了:

? private getFirst() {
? ? const { pageNo } = this.state;
? ? if (pageNo > 3) {
? ? ? return (<span onClick={()=>this.changePage(1)}>首頁(yè)</span>);
? ? } else {
? ? ? return;
? ? }
? }
? private changePage (index: number) {
? ? this.setState({ pageNo: index });
? }

再補(bǔ)充一個(gè)使用的例子:

import React from 'react';
?
interface Iprops {
? name: string;
? click: any;
}
?
const ButtonItem = (props: Iprops) => {
? return <div onClick={props.click}>{props.name}</div>
}
?
const ContentMenu: React.FC<{}> = () => {
? const product = (type: number) => {
? ? return () => {
? ? ? alert(type);
? ? }
? }
?
? return (
? ? <div>
? ? ? <ButtonItem name="生成1" click={product(1)} />
? ? </div>
? );
};
?
export default ContentMenu;

react的onClick事件調(diào)用的各種寫(xiě)法與觸發(fā)情況

handleClick 是普通函數(shù)

  handleClick(params?: any) {
    console.log('1000101010101010100');
    console.log(params);
    console.log(this)
  }
  onClick={this.handleClick}
    // 正確,但是無(wú)法傳值
  onClick={this.handleClick()}
    // 在handleClick(): any,即聲明返回值any 時(shí),不需要 this.handleClick = this.handleClick.bind(this),似乎能正確使用,能獲取到 this;
    // 在handleClick() 不設(shè)置 : any 時(shí),不管是否增加 this.handleClick = this.handleClick.bind(this),都是報(bào)錯(cuò),界面無(wú)法顯示。
  onClick={this.handleClick.bind(this, 12)}
    // 正確,不需要 this.handleClick = this.handleClick.bind(this),能獲取this,能獲取參數(shù)。
  onClick={() => this.handleClick}
    // 無(wú)效且無(wú)報(bào)錯(cuò),即無(wú)法觸發(fā)
  onClick={() => { this.handleClick }}
    // 無(wú)效且無(wú)報(bào)錯(cuò),即無(wú)法觸發(fā)
  onClick={() => this.handleClick()}
    // 正確,不需要 this.handleClick = this.handleClick.bind(this),能獲取this,能獲取參數(shù)。
  onClick={() => { this.handleClick() }}
    // 正確,能獲取this,能獲取參數(shù)。

handleClick 是箭頭函數(shù)

PS:箭頭函數(shù)皆不需要 this.handleClick = this.handleClick.bind(this):

  handleClick = (params?: any) => {
    console.log('1000101010101010100');
    console.log(params);
    console.log(this)
  }
  onClick={this.handleClick}
    // 正確,但是無(wú)法傳值
  onClick={this.handleClick()}
    // 在handleClick(): any,即聲明返回值any 時(shí),頁(yè)面渲染時(shí),自動(dòng)觸發(fā)onClick,且onClick點(diǎn)擊失效;
    // 在handleClick() 不設(shè)置 : any 時(shí),報(bào)錯(cuò),界面無(wú)法顯示。
  onClick={() => this.handleClick}
    // 無(wú)效且無(wú)報(bào)錯(cuò),即無(wú)法觸發(fā)
  onClick={() => { this.handleClick }}
    // 無(wú)效且無(wú)報(bào)錯(cuò),即無(wú)法觸發(fā)
  onClick={() => this.handleClick()}
    // 正確,能獲取this,能獲取參數(shù)。
  onClick={() => { this.handleClick() }}
    // 正確,能獲取this,能獲取參數(shù)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React安裝node-sass失敗解決方案分享

    React安裝node-sass失敗解決方案分享

    Node-sass是一個(gè)庫(kù),它將Node.js綁定到LibSass(流行樣式表預(yù)處理器Sass的C版本),它允許用戶以令人難以置信的速度將.scss文件本地編譯為css,并通過(guò)連接中間件自動(dòng)編譯,下面這篇文章主要給大家介紹了關(guān)于React安裝node-sass失敗解決的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼

    瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼

    這篇文章主要給大家介紹了關(guān)于瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼,并且詳細(xì)總結(jié)了瀏覽器中的音視頻知識(shí),對(duì)大家的理解和學(xué)習(xí)非常有幫助,需要的朋友可以參考下
    2021-08-08
  • concent漸進(jìn)式重構(gòu)react應(yīng)用使用詳解

    concent漸進(jìn)式重構(gòu)react應(yīng)用使用詳解

    這篇文章主要為大家介紹了concent漸進(jìn)式重構(gòu)react應(yīng)用的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 如何應(yīng)用?SOLID?原則在?React?中整理代碼之開(kāi)閉原則

    如何應(yīng)用?SOLID?原則在?React?中整理代碼之開(kāi)閉原則

    React?不是面向?qū)ο?,但這些原則背后的主要思想可能是有幫助的,在本文中,我將嘗試演示如何應(yīng)用這些原則來(lái)編寫(xiě)更好的代碼,對(duì)React?SOLID原則開(kāi)閉原則相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-07-07
  • react map使用方法實(shí)例詳解

    react map使用方法實(shí)例詳解

    map()方法是在React中常用的數(shù)組處理方法之一,可以用于遍歷數(shù)組、生成組件列表以及進(jìn)行數(shù)據(jù)轉(zhuǎn)換等操作,通過(guò)合理運(yùn)用map()方法,可以更靈活地處理和展示數(shù)據(jù),下面給大家講解react map使用方法,感興趣的朋友一起看看吧
    2023-10-10
  • react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問(wèn)題

    react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問(wèn)題

    這篇文章主要介紹了react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • react antd表格中渲染一張或多張圖片的實(shí)例

    react antd表格中渲染一張或多張圖片的實(shí)例

    這篇文章主要介紹了react antd表格中渲染一張或多張圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法

    react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法

    本篇文章主要介紹了react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • React中阻止事件冒泡的問(wèn)題詳析

    React中阻止事件冒泡的問(wèn)題詳析

    這篇文章主要給大家介紹了關(guān)于React中阻止事件冒泡問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用React具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • react component changing uncontrolled input報(bào)錯(cuò)解決

    react component changing uncontrolled in

    這篇文章主要為大家介紹了react component changing uncontrolled input報(bào)錯(cuò)解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

容城县| 涪陵区| 大厂| 通河县| 罗江县| 聂拉木县| 陆河县| 沧源| 汉源县| 那坡县| 卢氏县| 新巴尔虎右旗| 类乌齐县| 白玉县| 萍乡市| 德惠市| 建湖县| 平乐县| 柯坪县| 邓州市| 泸溪县| 彭山县| 丘北县| 壶关县| 平阳县| 江西省| 华宁县| 湖南省| 诸暨市| 新乐市| 澄迈县| 平潭县| 东港市| 琼海市| 苏尼特右旗| 开阳县| 阿城市| 华坪县| 涡阳县| 永新县| 丰城市|