http://127.0.0.1:9999/tickets?page=1&search=test&itemcount=20&filter=1024
이런식으로 url을 구성할 필요가 생겼습니다.
그 이유는 어떤 페이지, 어떤 결과 화면을 다른 사람에게 링크로 공유하려면
parameter가 전부 url에 포함되어 있어야 한다고 판단했기 때문이구요.
또 아래와 같이 파라미터를 설정해놓았습니다.
protected int _CurrentPage = 1;
[SupplyParameterFromQuery(Name = "page")]
[Parameter]
public int CurrentPage
{
get { return _CurrentPage; }
set
{
if (value < 1)
{
_CurrentPage = 1;
}
else
{
_CurrentPage = value;
}
}
}
[Parameter]
[SupplyParameterFromQuery(Name = "search")]
public string search { get; set; } = "";
근데 문제가 있습니다.
OnParametersSet 메서드를 override하면 선언된 Parameter의 개수만큼 호출이 되어서,
불필요한 작업이 반복되는 것 같아서요..
이걸 한번만 호출되도록 하는 방법은 없을까요?
아니면 최초 제가 url에 parameter를 실어보내는 접근방법이 잘못된걸까요?
2 Likes
cupsos
April 7, 2023, 7:32am
2
SetParametersAsync를 override 해서 해보세요. 저도 비슷하게 구현 했었네요.
protected bool AfterRender { get; private set; } = false;
protected override void OnAfterRender(bool firstRender)
{
AfterRender = true;
base.OnAfterRender(firstRender);
}
public override async Task SetParametersAsync(ParameterView parameters)
{
await base.SetParametersAsync(parameters);
if (AfterRender)
{
await LoadPageAsync();
}
}
2 Likes
hjnn
April 7, 2023, 8:31am
3
모든 코드를 보지 않아서 잘 모르겠지만, 제가 테스트했을 때는 여러 params를 전달한다고 OnParametersSet가 여러번 호출되지 않습니다. 라이프사이클 메소드 중에서 URL을 변경하는 코드가 있는지 확인 가능할까요?
3 Likes
안녕하세요. 김진석입니다.
parameter가 2개여서 개수만큼 호출된다고 생각하신 것 같습니다.
(저도 처음 보고 헛… 이라고 생각했습니다.)
애초에 blazor가 parameter의 개수와 관계없이 2번 호출된다고 이해하시면 됩니다.
상세한 설명은 아래 링크를 봐주세요. 저보다 잘 설명하시네요.
혹시 꼭 한 번만 호출하게 하려면 아래 링크에서 _Host.cshtml을 수정하면 된다고 되어 있습니다.
(변경해보니 한번만 호출됩니다.)
url에 parameter로 실어보내는 방법이 이상한 것 같지는 않습니다.
멋대로 blazor server 프로젝트라고 생각했는데… 맞을 꺼라 믿습니다. ㅎㅎㅎ
감사합니다.
6 Likes
맞습니다. navigateTo로 페이지 이동하는 함수가 있어요.
일단 화면 구성이 이렇게 되어있고요.
처음 페이지 로딩시 기본 선택된 필터가 있고, 그 필터에 따라서 로딩을 해서 뿌려줘야 합니다.
OnAfterRender, OnParameterSet을 override하다보니 2번 호출된 것 같아요…
질문 내용과 소스를 다시 정리해서 한번 올리겠습니다.
1 Like
_Host.cshtml 파일을 수정하고나니 OnParameterSet이 두번 호출되지 않네요…
일단 아래와 같이 수정했습니다.
@*<component type="typeof(App)" render-mode="ServerPrerendered" /> ----- 주석처리 *@
<component type="typeof(App)" render-mode="Server" />
페이지 렌더링할때 호출하고, Filter버튼에 따라 또 호출하고 그러다보니 뒤죽박죽 되어버렸네요…ㅎㅎ
일단 render-mode를 수정하는 방안으로 진행할 예정입니다.
그리고 Blazor Server 맞습니다!^^
답변 감사합니다!
2 Likes