Laravel Livewire 分页结果在点击下一步后消失 Page/Page 数字

Laravel Livewire Pagination Result Disappear After Clicking Next Page/Page Number

我一直在寻找与上述类似的问题,但我找不到,所以我要做一个

我的问题是,当我使用 Laravel Livewire 进行非常简单的分页时,第一页显示得很好,但是当我单击“下一个 Page/Page 编号”时,结果就消失了,尽管还有更多结果要显示,但我完全不知道,无论我如何尝试。

As you can see, the simple pagination work just fine, there is next and previous button and a very big next and previous picture below

But the moment i click next page or page number, the result just disappear, the total number of result even go to 0

这是我的组件代码:

namespace App\Http\Livewire;

use Livewire\Component;
use Illuminate\Http\Request;
use DB;
use Livewire\WithPagination;

class Category extends Component
{   
    use WithPagination;
    public function render(Request $request)
    {   
        $id = $request->id;

        $product_count = DB::table('product')->where('category_id', $id)->count();

        $page = $request->page ?? 1;

        $product_all = DB::table('product')->where('category_id', $id)->paginate(3);

        return view('livewire.category',[
            'product_all' => $product_all,
            'product_count' => $product_count,
            'page' => $page,
        ]);
    }
}

这是我的查看代码:

<div class="row">
    @foreach ($product_all as $product)
    <div class="col-lg-4 col-md-6 col-12 mt-4 pt-2">
        @php
            product($product);
        @endphp
    </div>
    @endforeach   

    <!-- PAGINATION START -->
    @if ($product_all instanceof \Illuminate\Pagination\LengthAwarePaginator)
    {{ $product_all->links() }}
    @endif
    <!-- PAGINATION END -->
</div>

还有一个小通知,我尝试了没有 livewire 的分页(只是正常的 laravel 分页)并且它工作得很好,这就是为什么我真的对发生的事情一无所知

我已经包含了 livewire @livewireStyles 和@livewireScripts,但我在其他任何地方都找不到答案,因为我没有看到任何符合我的问题的问题,而且我对 livewire 有点陌生

我认为你的问题与 livewire 组件的 render 方法上的请求参数有关,一旦 livewire 重新渲染就无法访问请求值,直到下次浏览器刷新。

public function render(Request $request)

相反,使用 livewire 属性将 id 和页面绑定到 livewire 可以在重新呈现时读取的值

@livewire('some-component', ['category_id' => $parent_category_id, 'page' => $parent_page_value])

像上面一样,livewire 将此值绑定到自身属性并在重新渲染时从中读取

public $category_id, $page;

public function render()
{
   $product_count = DB::table('product')->where('category_id', $this->category_id)->count();
   $product_all = DB::table('product')->where('category_id', $this->category_id)->paginate(3);

   return view('livewire.category',[
      'product_all' => $product_all,
      'product_count' => $product_count,
      'page' => $this->page,
   ]);
}