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

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

第三方 API 需要訪問 React 應用程序中的狀態(tài)

第三方 API 需要訪問 React 應用程序中的狀態(tài)

慕森王 2023-01-06 10:51:42
我們有一個 React 應用程序,它與第三方庫通信以進行電話集成。每當有人打電話時,第三方庫就會觸發(fā) React 應用程序內(nèi)部的回調(diào)函數(shù)。到現(xiàn)在為止一切都很好,但是現(xiàn)在這個回調(diào)函數(shù)需要訪問當前狀態(tài),這似乎會帶來問題。這個回調(diào)函數(shù)內(nèi)部的狀態(tài),似乎總是處于初始值并且永遠不會更新。我在這里做了一個小沙盒來描述這個問題:https ://codesandbox.io/s/vigorous-panini-0kge6?file=/src/App.js在沙盒中,當我單擊“內(nèi)部增加”時,計數(shù)器值會正確更新。但是,相同的函數(shù)已添加為 ThirdPartyApi 的回調(diào),當我單擊“外部增加”時將調(diào)用它。當我這樣做時,計數(shù)器值恢復為 useState 中的默認值。我怎樣才能讓第三個庫知道來自 React 內(nèi)部的狀態(tài)更新?應用程序.js:import React, { useState, useEffect } from "react";import ThirdPartyApi from "./third-party-api";import "./styles.css";let api = new ThirdPartyApi();export default function App() {  const [counter, setCounter] = useState(5);  const increaseCounter = () => {    setCounter(counter + 1);    console.log(counter);  };  useEffect(() => {    api.registerCallback(increaseCounter);  }, []);  return (    <div className="App">      <p>        <button onClick={() => increaseCounter()}>Internal increase</button>      </p>      <p>        <button onClick={() => api.triggerCallback()}>External increase</button>      </p>    </div>  );}第三方-api.js:export default class ThirdPartyApi {  registerCallback(callback) {    this.callback = callback;  }  triggerCallback() {    this.callback();  }}
查看完整描述

1 回答

?
慕妹3146593

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

您需要通過React 的 useCallbackincreaseCounter()包裝到回調(diào)中。實際上,因此重新渲染,重置.api.registerCallback()counter

您可以在此處了解有關此行為的更多信息。

import React, { useState, useCallback, useEffect } from "react";

import ReactDOM from "react-dom";


class ThirdPartyApi {

  registerCallback(callback) {

    this.callback = callback;

  }


  triggerCallback() {

    this.callback();

  }

}


let api = new ThirdPartyApi();


function App() {

  const [counter, setCounter] = useState(5);


  const increaseCounter = useCallback(() => {

    setCounter(counter + 1);

    console.log(counter);

  }, [counter]);


  useEffect(() => {

    api.registerCallback(increaseCounter);

  }, [increaseCounter]);


  return (

    <div className="App">

      <p>

        <button onClick={() => increaseCounter()}>Internal increase</button>

      </p>


      <p>

        <button onClick={() => api.triggerCallback()}>External increase</button>

      </p>

    </div>

  );

}


const rootElement = document.getElementById("root");

ReactDOM.render(

  <React.StrictMode>

    <App />

  </React.StrictMode>,

  rootElement

);


查看完整回答
反對 回復 2023-01-06
  • 1 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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