# 問題:OnInitializedAsync 會跑二次！

## 引言

於 Blazor Server App 應用程式中， OnInitializedAsync 觸發二次，經測試確實有此問題。模拜google大神原因出在預設的 render-mode="ServerPrerendered" 此模式下 OnInitializedAsync 會觸發二次，解決方式改設定 render-mode="Server" 就行了。

{% hint style="success" %}

### 補充 on 23-02-19

此 Render 二次問題應該已經解決。經測試就算用  render-mode="ServerPrerendered" 也沒有此問題了
{% endhint %}

## 紀錄

在 `_Html.cshtml` 變更 App 的 `render-mode` 為 "Server" 即可。

<figure><img src="https://3465043909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcGSU3zrSsgSHyCjRHOM%2Fuploads%2FbbZBxSX8doOF5YLntJ1x%2Fimage.png?alt=media&#x26;token=3900aaf7-603b-4ff3-94cb-ab9570d632b0" alt=""><figcaption></figcaption></figure>

## render-mode 官方文件中英文

<table data-header-hidden><thead><tr><th width="259"></th><th width="71.33333333333331"></th><th></th></tr></thead><tbody><tr><td>Server</td><td>2</td><td>轉譯 Blazor 伺服器端應用程式的標記。 這不包含元件的任何輸出。 當使用者代理程式啟動時，它會使用此標記來啟動 blazor 應用程式。<br>Renders a marker for a Blazor server-side application. This doesn't include any output from the component. When the user-agent starts, it uses this marker to bootstrap a blazor application.</td></tr><tr><td>ServerPrerendered</td><td>3</td><td>將元件轉譯為靜態 HTML，並包含 Blazor 伺服器端應用程式的標記。 當使用者代理程式啟動時，它會使用此標記來啟動 blazor 應用程式。<br>Renders the component into <mark style="background-color:orange;">static HTML</mark> and includes a marker for a Blazor server-side application. When the user-agent starts, it uses this marker to bootstrap a blazor application.</td></tr><tr><td>Static</td><td>1</td><td>將元件轉譯為靜態 HTML。<br>Renders the component into static HTML.</td></tr><tr><td>WebAssembly</td><td>4</td><td>轉譯 Blazor Webassembly 應用程式的標記。 這不包含元件的任何輸出。 當使用者代理程式啟動時，它會使用此標記來啟動 blazor 用戶端應用程式。<br>Renders a marker for a Blazor webassembly application. This doesn't include any output from the component. When the user-agent starts, it uses this marker to bootstrap a blazor client-side application.</td></tr><tr><td>WebAssemblyPrerendered</td><td>5</td><td>將元件轉譯為靜態 HTML，並包含 Blazor Webassembly 應用程式的標記。 當使用者代理程式啟動時，它會使用此標記來啟動 blazor 用戶端應用程式。<br>Renders the component into <mark style="background-color:orange;">static HTML</mark> and includes a marker for a Blazor webassembly application. When the user-agent starts, it uses this marker to bootstrap a blazor client-side application.</td></tr></tbody></table>

## 從文獻推論

在 ServerPrerendered (已證實) 與 WebAssemblyPrerendered (未證實) 兩種模式下，`OnInitializedAsync()`、`OnParametersSetAsync()`會觸發兩次。

## 相關文章

{% embed url="<https://stackoverflow.com/questions/58075628/why-are-blazor-lifecycle-methods-getting-executed-twice>" %}

{% embed url="<https://learn.microsoft.com/zh-tw/dotnet/api/microsoft.aspnetcore.mvc.rendering.rendermode?view=aspnetcore-7.0>" %}

{% embed url="<https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.rendering.rendermode?view=aspnetcore-7.0>" %}
