第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 react 和 typescript 中使用 context.provider 設(shè)置狀態(tài)?

如何在 react 和 typescript 中使用 context.provider 設(shè)置狀態(tài)?

寶慕林4294392 2022-09-02 16:57:59
我正在使用 context.provider usecontext reacthook 來顯示一個對話框。我把這個設(shè)置在MainComponent周圍。對于 context.provider 的值屬性,我獲取錯誤類型 {setDialogOpen(Open: boolean) => void} 不可分配給布爾類型。我想做什么?我想在用戶單擊主頁或書籍組件中的按鈕時顯示對話框。單擊對話框中的隱藏按鈕,對話框不應(yīng)打開。下面是我的代碼,function MainComponent() {    const DialogContext = React.createContext(false);    let [showDialog, setShowDialog] = React.useState(false);    return (        <DialogContext.Provider value={{             setDialogOpen: (open: boolean) => setShowDialog(open)}}>//get error            {showDialog && <Dialog DialogContext={DialogContext}/>            <Route                 path="/items">                <Home DialogContext={DialogContext}/>            </Route>            <Route                path="/id/item_id">                <Books DialogContext={DialogContext}/>            </Route>        </DialogContext.Provider>    )}function Home({DialogContext} : Props) {    const dialogContext= React.useContext(DialogContext);    const handleClick = (dialogContext: any) {        dialogContext.setDialogOpen(true);    }    return (         <button onClick={handleClick(dialogContext)}>button1</button>    )}function Books({DialogContext} : Props) {    const dialogContext= React.useContext(DialogContext);    const handleClick = (dialogContext: any) {        dialogContext.setDialogOpen(true);    }    return (         <button onClick={handleClick(dialogContext)}>button2</button>    )}function Dialog({DialogContext}: Props) {    return(        <div>            //sometext            <button> hide</button>        </div>    ) }我嘗試了如下方法,return (    <DialogContext.Provider value={{         setShowDialog(open)}}>//still get a error            {showDialog && <Dialog DialogContext={DialogContext}/>)有人可以幫我解決這個問題,或者提供更好的方法來顯示使用usecontext hook單擊主頁和書籍組件中的按鈕的對話框。謝謝。
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

您必須在代碼中修復(fù)一些問題。

  • 您正在使用缺省值 創(chuàng)建上下文。然后稍后您嘗試將其重寫為對象,從而導(dǎo)致類型錯誤。false

  • 要解決此問題,請在單獨的文件/幫助程序中創(chuàng)建和導(dǎo)出上下文。不要把它們作為道具傳下去。

  • 導(dǎo)入父組件和子組件中的上下文。

  • 您在子組件中的樂趣缺少.handleClickarrow

  • in 子組件直接調(diào)用函數(shù)。您應(yīng)該只傳遞函數(shù)引用。button onClick

請參閱更新后的代碼,并在下面進行更正。

上下文幫助程序

...

type ContextProps = { 

    setDialogOpen?: (open: boolean) => void,

  };

export const DialogContext = React.createContext<ContextProps>({});

主組件


import {DialogContext} from '../contextHelper';

function MainComponent() {

    // const DialogContext = React.createContext(false); //<---- remove this

    let [showDialog, setShowDialog] = React.useState(false);

    return (

        <DialogContext.Provider value={{ 

            setDialogOpen: (open: boolean) => setShowDialog(open)}}>

...

家庭和書籍組件


import {DialogContext} from '../contextHelper';

function Home() {

    const dialogContext= React.useContext(DialogContext);

    const handleClick = () => {

        dialogContext.setDialogOpen(true);

    }

    return ( 

        <button onClick={handleClick}>button1</button>

    )

}


import {DialogContext} from '../contextHelper';

function Books() {

    const dialogContext= React.useContext(DialogContext);

    const handleClick = () => {

        dialogContext.setDialogOpen(true);

    }

    return ( 

        <button onClick={handleClick}>button2</button>

    )

}


查看完整回答
反對 回復(fù) 2022-09-02
  • 1 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號