Я хочу загрузить представление, а затем обновить данные переменных, чтобы страница не требовала времени для загрузки (много данных для загрузки). Возможно ли это с Laravel livewire?
Я пытаюсь заставить livewire отобразить представление, а затем обновить общедоступные переменные после загрузки страницы. В моем случае я буду получать данные из api, поэтому я хочу, чтобы пользователь видел страницу, а затем я могу добавить некоторые загрузочные счетчики во время выборки данных.
Однако из моего теста и просмотра жизненный цикл livewire моя тестовая переменная не обновляется.
Пример контроллера 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>
В хуках жизненного цикла говорилось, что обезвоживание запускается после render (), что означает, что $ test should = 'TEST3 но он остается как "привет", мое исходное состояние.
Похоже, есть и хуки javascript, например, когда компонент был инициализирован. Но я не уверен, как оттуда вызывать функции или переменные livewire.
Кто-нибудь знает, как обновить переменные livewire после рендеринга представления?






Вы можете инициализировать данные после того, как страница будет отрисована в первый раз, с помощью директивы 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');
}
}
См. Дополнительную информацию в официальной документации по отложенная загрузка.
Похоже, я пропустил отложенную загрузку в документации livewire! Упс