Javascript 反应组件变量状态don';不保留上次更新的值

Javascript 反应组件变量状态don';不保留上次更新的值,javascript,reactjs,powerbi,powerbi-embedded,Javascript,Reactjs,Powerbi,Powerbi Embedded,我正在使用基于事件的库(powerbi客户端反应) 首先,我应该从getEmbeddedComponent获取组件,并在report变量中设置它 然后使用report.getFilters()(基于承诺的方法)获取一些值 我试图获取getEmbeddedComponent getEmbeddedComponent={function (embeddedReport) { console.log("enter here", embeddedReport) // well e

我正在使用基于事件的库(powerbi客户端反应)

首先,我应该从
getEmbeddedComponent
获取组件,并在
report
变量中设置它 然后使用
report.getFilters()
(基于承诺的方法)获取一些值

我试图获取
getEmbeddedComponent

getEmbeddedComponent={function (embeddedReport) {
  console.log("enter here", embeddedReport) // well entering here
  embeddedReport.getPages().then(function (filters) {
    console.log("get filters", filters);
  }).catch(function (errors) {
    console.log("error", errors);
  });
}}
但我从来没进过电话

因此,我尝试使用
useState()
并在
eventHandlers
内触发
getFilters
,但值总是
{test:“init”}
(初始值)

function App(props) {
  const [embedToken, setEmbedToken] = useState(props.token);
  const [report, setReport] = useState({ test: "init" });

  useEffect(() => {
    if (props.token === undefined) {
      props.requestToken();
    }
    setEmbedToken(props.token);
  }, [props.token]);
  return (
    <div className="App">
      <QueuesFilter />
      <PowerBIEmbed
        embedConfig={{
          type: "report", // Supported types: report, dashboard, tile, visual and qna
          id: props.reportInfos?.id,
          embedUrl: props.reportInfos?.embedUrl,
          accessToken: props.token,
          tokenType: models.TokenType.Aad,
          permissions: models.Permissions.All,
          settings: {
            panes: {
              filters: {
                expanded: true,
                visible: false,
              },
            },
            background: models.BackgroundType.Transparent,
          },
        }}
        eventHandlers={
          new Map([
            [
              "loaded",
              function (event) {
                console.log("Reporttest loaded", report);
              },
            ],
            [
              "rendered",
              function () {
                console.log("Reporttest rendered", report);
              },
            ],
            [
              "visualRendered",
              function () {
                console.log("Reporttest visualRendered", report);
              },
            ],
            [
              "error",
              function (event) {
                console.log(event.detail);
              },
            ],
          ])
        }
        cssClassName={"report-style-class"}
        getEmbeddedComponent={function (embeddedReport) {
          console.log("Reporttest getEmbeddedComponent", report);
          setReport(embeddedReport);
        }}
      />
      {/* <div className="report-style-class" ></div> */}
    </div>
  );
}
功能应用程序(道具){
const[embedToken,setEmbedToken]=useState(props.token);
const[report,setReport]=useState({test:“init”});
useffect(()=>{
if(props.token==未定义){
props.requestToken();
}
SetEmbeddeToken(道具令牌);
},[props.token]);
返回(
{/*  */}
);
}
我多次重新加载应用程序,总是以相同的顺序获取控制台日志

我明白了,您想访问事件处理程序中更新的报告对象。
建议的方法是接受更新后的报告作为事件处理程序的第二个参数 提及

eventHandlers={
新地图([
[
“已加载”,
功能(事件、报告){
//第二个参数是更新的报告对象
日志(“Reporttest loaded”,报告);
},
],
[
“已呈现”,
功能(事件、报告){
console.log(“Reporttest呈现”,report);
},
],
]
}
您正在获取旧的report state值,因为当更新道具时,仅当事件/事件处理程序从以前的道具更改时,PowerBIEmbed组件中的事件处理程序映射才会更新。

因此,由于

无法在加载的事件处理程序中获取报告的最新值,因此调用了引用报告变量旧状态的旧事件处理程序。这就是问题所在吗?