Javascript 反应组件变量状态don';不保留上次更新的值
我正在使用基于事件的库(powerbi客户端反应) 首先,我应该从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
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组件中的事件处理程序映射才会更新。因此,由于无法在加载的事件处理程序中获取报告的最新值,因此调用了引用报告变量旧状态的旧事件处理程序。这就是问题所在吗?