-
Notifications
You must be signed in to change notification settings - Fork 1
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
Proposal: Component property and Slot feature (aka, props
/ v-bind
/ <Slot>
)
#104
Comments
Can we use |
The |
I think we should inject CMS contents before props convert step 🤔 |
Yep. That's true. |
I implemented the |
#114 related work |
What is this?
#103 describe conditional rendering feature. This conditional feature need the data which passing from parent component of html. This mean we need to pass the data into child component.
Furthermore, we had better to pass the whole of HTML Node into child component. This feature is known as
Slot
feature.This features inspired from Vue / React.
Use case
There are many use case this feature.
1. props with
v-if
Almost props usage is this case. Conditional Rendering use
props
for condition.Parent component:
Child component:
Rendering Result:
2. display props value
Sometime pass the user information into component, and display this value.
Parent component:
Child component:
Render Result:
In this case, we recommend to use Slot feature
3. dissplay Slot value
Slot allow the pass the whole child element into components.
Parnet component:
Child component:
Render Result:
Consideration
spear-cli parse the following order:
cms-xxx
attr)dist
)We consider the following case:
(
blog
contents hastarget-template-string
which specify the field type name.)index.html
sample-component.spear
If we start props convert step before inject cms content, an above convert might be failed since index.html pass the
{%=blog_target-template-string %}
into sample-component viaprops.template
.So we need to props convert first step.
これはなに?
#103 は条件付きレンダリングについて記載しています。この条件付きレンダリングでは、データをHTMLの親コンポーネントから渡す必要があります。つまり、データを親から子へ伝搬する必要がります。
さらにHTMLノードすべての要素を子コンポーネントへ伝える必要もあり、それは
Slot
機能として知られています。これらの機能は Vue/React からヒントを得ています。
ユースケース
これらの機能はいくつかのユースケースがあります。
1.
v-if
を利用するための propsprops を利用するほとんどのケースがこれに該当します。条件付きレンダリングでは条件として
props
を利用します。親コンポーネント:
子コンポーネント
レンダリング結果
2. props の値を表示する
ユーザー情報を子コンポーネントへ渡して、それを表示することに利用します。
親コンポーネント:
子コンポーネント:
レンダリング結果:
このケースでは、Slot 機能を利用したほうが良いです。
3.Slot の値を表示する
Slotは小要素すべてをコンポーネントへ渡す方法です。
親コンポーネント:
子コンポーネント:
レンダリング結果:
考慮すべき点
解析順番
spear-cli 解析は以下の順番で行われます。
dist
ディレクトリへコピー)props を導入するにあたって、以下のケースでは注意が必要です。
(
blog
コンテンツはtarget-template-string
という表示するフィールド名を保持するフィールドを持っています。)index.html
sample-component.spear
もし、CMSコンテンツ注入前に props の注入が行われた場合、上記例は
{%= blog_target-template-string %} を
props.template` 経由で sample-component へ渡してしまうため、期待した結果になりません。The text was updated successfully, but these errors were encountered: