Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft: Wip #10

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

Draft: Wip #10

wants to merge 3 commits into from

Conversation

solweo
Copy link
Collaborator

@solweo solweo commented Jul 2, 2024

No description provided.

@solweo solweo requested a review from kakserpom July 2, 2024 15:43
Copy link
Collaborator

@kakserpom kakserpom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't make a full review yet, but from I saw this is a no-go as it fails to convey the meaning correctly.

@@ -0,0 +1,175 @@
# Пробрасывание дочерних элементов

В процессе построения компонентов, может возникнуть желание как бы "пробросить" дочерний элемент сквозь несколько слоёв компонентов.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

как бы тут лишнее, кавычки тоже

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему? "пробросить" здесь использовано больше в переносном смысле + так я делаю акцент

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну и "как бы" вместе с кавычками это точно избыточно. Можно либо вообще без всего, либо оставить кавычки.

}
```

Все довольно прозаично: когда пользователь "вошёл", показываем `children`. Если же нет, то отображаем `fallback`. А пока ожидаем ответа, рендерим `()`, т.е. ничего.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Straightforward — прозаично? Srsly? И зачем тут кавычки?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему перевод должен быть слово в слово? Straightforward вполне можно трактовать как "прозаично". С кавычками вся та же история: переносный смысл, - здесь нет так таковой авторизации, тут как бы "вошёл"

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Коннотация у "straightforward" и у "прозаичный" (prosaic) совершенно разная. Прозаичный — скучный, банальный, неинтересный. Prosaic — having the style or diction of prose; lacking poetic beauty.

Straightforward же наоборот прямолинейный, в положительном смысле.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Он не "как бы" вошёл, он вошёл. Пользователь вошел в свою учетную запись.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO эмоциональный окрас решает в художественном тексте, но здесь как будто бы нет принципиальной разницы. Что же касается понятия заключённого в этом слове, да, можно вместо "прозаичный" сделать "всё весьма прямолинейно"

Я просто исходил из того, что "lacking beauty" можно трактовать как "отсутствие сложности" (прямолинейно)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you describe something as straightforward, you approve of it because it is easy to do or understand.

Copy link
Collaborator

@kakserpom kakserpom Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Рассмотрим следующий код:
...
Он достаточно прост: когда пользователь авторизован, мы выводим children. Когда нет — выводим fallback. А пока мы ждём в неопределенности, выводим (), т.е. ничего.

error[E0507]: cannot move out of `children`, a captured variable in an `Fn` closure
```

Проблема в том, что и `<Suspense/>`, и `<Show/>` должны иметь возможность конструировать своих `children` несколько раз. При первом построении дочерних элементов `<Suspense/>`, им будет взято право владения и `fallback`, и `children`, чтобы можно было передать их для вызова в `<Show/>`. Однако, из-за этого они перестают быть доступны для построения будущих дочерних компонентов `<Suspense/>`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Должны? Конструировать?

Copy link
Collaborator

@kakserpom kakserpom Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first time you construct <Suspense/>’s children, it would take ownership of fallback and children to move them into the invocation of <Show/>, but then they're not available for future <Suspense/> children construction.

ты переводишь как

При первом построении дочерних элементов <Suspense/>, им будет взято право владения и fallback, и children, чтобы можно было передать их для вызова в <Show/>. Однако, из-за этого они перестают быть доступны для построения будущих дочерних компонентов <Suspense/>.

что по смыслу неправильно. Корректный перевод:

При первом составлении дочерних элементов <Suspense> потребовалось бы владение fallback и children, чтобы сделать move этих значений внутрь вызова <Show/>, но тогда они не были бы доступны для последующих составлений дочерних элементов <Suspense/>.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь мне кажется больше вкусовщина в отношении "построить" и "составить". Однако в остальном твой вариант действительно легче передаёт суть

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты правда не понимаешь разницу в смысловой нагрузке?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если она и есть, я думаю "построить" здесь уместнее. Компоненты строятся билдером

)
```

Каждый компонент владеет своими параметрами; от чего нет возможности запустить `<Show/>` в этом сценарии, поскольку тот захватил лишь ссылки на `fallback` и `children`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не параметрами, а свойствами.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"отчего" слитно

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"тот" — сценарий?

(такие как рендеринг чего-нибудь в браузере или отправка сетевого запроса) как можно реже, в ответ на изменения реактивных значений.

Пока мы видели в действии сигналы. В этих главах мы опустимся немного глубже, посмотрим на эффекты — вторую половину всей истории.
Leptos построен на основе мелкозернистой реактивной системы ([англ.](https://www.google.com/search?q=fine-grained+reactivity)), призванной исполнять как можно реже затратные дополнительные "эффекты" (вроде рендеринга в браузере или сетевого запроса) в овтет на изменения реактивных значений.
Copy link
Collaborator

@kakserpom kakserpom Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут явный регресс. "призванной исполнять как можно реже затратные дополнительные" это что вообще?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше fine-grained reactivity сделать ссылкой.

@kakserpom kakserpom changed the title Wip Draft: Wip Jul 2, 2024

Заметим, что это работает благодаря тому, что `<Show/>` и `<Suspense/>` нужна только неизменяемая ссылка на их дочерние элементы (которую `.with_value` может предоставить), а не право собственности.

В других ситуациях может понадобиться пробрасывать владеемые свойства сквозь функцию, что принимает `ChildrenFn`, отчего тот будет вызван более одного раза. В этом случае может помочь `clone:` в макросе `view`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Владеемые свойства? Wat?


Тем не менее и `<Suspense/>`, и `<Show/>` принимают `ChildrenFn`, что значит `children` должен реализовывать тип `Fn`, чтобы его можно было вызывать многократно, используя лишь неизменяемую ссылку. Это означает, что нет нужды владеть `children` или `fallback`; достаточно иметь возможность передавать `'static` ссылки на них.

Этого можно достичь, используя примитив [`store_value`](https://docs.rs/leptos/latest/leptos/fn.store_value.html). Суть в том, что он сохраняет значение в реактивной системе, передавая управление владением фреймворку, подобно сигналам. В обмен получаем ссылку `Copy` и `'static`, к которой можно в дальнейшем обращаться и модифицировать через определённые методы.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Передавая управление владением?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ссылку Copy и 'static? Ссылку со временем жизни 'static, реализующую Copy.

This essentially stores a value in the reactive system, handing ownership off to the framework in exchange for a reference that is, like signals, Copy and 'static, which we can access or modify through certain methods.

По сути дела, он сохраняет значение значение в реактивной системе, передавая его во владение фреймворку, в обмен на ссылку, которая, подобно сигналу, реализует Copy, имеет время жизни 'static, которую с помощью определённых методов можно изменить или получить к ней доступ.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants