【问题标题】:Laravel Livewire Is it possible to change a variable after the view has been rendered?Laravel Livewire 视图渲染后是否可以更改变量?
【发布时间】:2021-06-26 00:23:59
【问题描述】:

我想加载视图然后更新变量数据以停止页面加载时间(加载大量数据)。 Laravel livewire 可以做到这一点吗?

我正在尝试让 livewire 呈现视图,然后在页面加载后更新公共变量。就我而言,我将从 api 获取数据,因此我希望用户看到页面,然后我可以在获取数据的同时添加一些加载微调器。

但是,根据我的测试并查看 livewire lifecycle,我的测试变量没有更新。

Livewire 控制器示例

class Example extends Component
{
    public $test;

    public function mount()
    {
        $this->test = 'hi';
    }

    public function render()
    {
        return view('livewire.example');
    }

    public function hydrate()
    {
        $this->test = 'TEST1';
    }

    public function hydrateTest()
    {
        $this->test = 'TEST2';
    }

    public function dehydrate()
    {
        $this->test = 'TEST3';
    }
}

Livewire 刀片示例

<div>
    <p>Hello World</p>
    <p>{{ $test }}</p>
</div>

生命周期钩子说 dehydrate 在 render() 之后运行,这意味着 $test should = 'TEST3 但它保持为“嗨”,我的初始状态。

似乎也有 javascript 钩子,比如当组件被初始化时。但我不确定如何从那里调用 livewire 函数或变量。

有谁知道如何在视图渲染后更新 livewire 变量?

【问题讨论】:

    标签: php laravel laravel-livewire


    【解决方案1】:

    您可以在页面第一次呈现后初始化数据,尽管wire:init 指令。

    你的刀片看起来像

    <div wire:init="loadData">
        <p>Hello World</p>
        <p>{{ $test }}</p>
    </div>
    

    您的组件将有一个方法 loadData(),您可以在其中调用 API。

    class Example extends Component
    {
        public $test;
    
        public function mount()
        {
            $this->test = 'hi';
        }
    
        public function loadData()
        {
            $this->test = 'Data loaded';
        }
    
        public function render()
        {
            return view('livewire.example');
        }
    }
    

    有关更多示例,请参阅deferred loading 上的官方文档。

    【讨论】:

    • 好像我错过了 livewire 文档中的延迟加载!哎呀
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2021-03-03
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多