0

我使用 InertiaJS 脚手架启动并运行了一个 laravel 微风应用程序。我正在使用中间件将一般数据传递给布局。

问题如下:

用户可以更改国家/地区,如果国家/地区已更改,您将拥有不同的可用商店列表。并非所有商店都始终出现在布局中,如果您更改国家/地区,则会为您提供特定国家/地区可用的所有商店的子集。

当用户从下拉列表中更改国家/地区时,我会发出$inertia.post请求,如果用户通过身份验证,我会将数据发送到我们的 CORE API 以更新用户偏好。

完成这一切后,我返回 a\Redirect::back()以便用户返回他更改国家/地区的地方。

这里如果我检查中间件,商店确实是正确的,但是前端没有得到新数据,但是如果我在更改国家后刷新,就会出现正确的商店。

 //INERTIA VUE
 countryChange() {
   this.$inertia.post(this.route('switch_country'), {new_country_id: this.selected_country.id}, {})
 }

控制器动作

 public function switchCountry(Request $request)
{
    $country_id = $request->get('new_country_id');

    if (SessionHandler::isAuth()) {
        $auth_token = SessionHandler::auth_token();
        $this->wrapper->changeCountry($country_id, $auth_token);
        $new_user_data = $this->wrapper->getUserInfo($auth_token);
        SessionHandler::sessionAuth($auth_token, $new_user_data['data']);
    }

    SessionHandler::updateCountry($country_id);
    return Redirect::back();
}

中间件

 /**
 * Define the props that are shared by default.
 *
 * @param \Illuminate\Http\Request $request
 * @return array
 */
public function share(Request $request)
{
    $cachingService = resolve(CachingService::class);
    $country_id = SessionHandler::getCurrentCountry();

    $stores = $cachingService->stores->getStoresInCountry($country_id);

    return array_merge(parent::share($request), [
        'auth' => [
            'user' => session()->has('user') ? session('user') : null,
        ],
        'selected_country' => $cachingService->countries->getCountryById($country_id),
        'store_categories' => $cachingService->store_categories->retrieveByCountryId($country_id),
        'stores' => $stores,
        'countries' => array_values(collect($cachingService->countries->get())->sortBy('name')->toArray()),
    ]);
}

TLDR:为什么 Inertia 不更新我所有应该在所有请求更改时传递的道具,并且需要刷新才能正确显示数据?

4

0 回答 0