簡體   English   中英

是否可以將 setState 方法作為道具傳遞?

[英]Is it possible to pass the setState method as props?

我想將 setState 方法傳遞給功能組件並從那里訪問它。

在 class 組件上

<InputRender name2={this.state.name2} setState={this.setState}/>

功能組件

import React from 'react';
export const InputRender=(props)=>{
return(
        <input
        type="text"
        onChange={(e) => { props.setState({ name2: e.target.value }); }}
        value={props.name2} />
    )
}

在運行時嘗試更改輸入時出現此錯誤: TypeError: Cannot read property 'enqueueSetState' of undefined

我知道可以有很多解決方法,我可以實現它們,但我想知道這是否可以實現,如果不能那么為什么。

您應該綁定 setState function。

setState={this.setState.bind(this)}

避免使用默認存在於 React 中的名稱,我建議使用一些自定義名稱:-

與您所做的類似,但格式不同

_updateName = (newName) => {
  this.setState({ name2: newName });
}

<InputRender name2={this.state.name2} updateName={this._updateName}/>

功能組件

import React from 'react';
export const InputRender=(props)=>{
return(
        <input
        type="text"
        onChange={(e) => { props.updateName(e.target.value); }}
        value={props.name2} />
    )
}

希望這可以幫助!

僅供參考,如果您將setState方法綁定為僅指向您的 class ,您仍然可以使您的更改生效,例如

<InputRender name2={this.state.name2} setState={this.setState.bind(this)}/>

但我不推薦這個

您可以將 setState 包裝在父組件的 function 中,然后您可以將 function 作為道具傳遞給子組件。 可以參考ReactJS 調用父方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM