1. セットアップ組み合わせAPI:
1. セットアップ関数の最初のパラメータ - props エクスポートデフォルト{ 小道具: { タイトル: 文字列 }, セットアップ(プロパティ) { コンソールログ(props.title) } } ただし、 'vue' から { toRefs } をインポートします セットアップ(プロパティ) { const { title } = toRefs(props) console.log(タイトル.値) } 2. 文脈
xport デフォルト { セットアップ(プロパティ、コンテキスト) { // 属性(非応答オブジェクト) コンソールログ(コンテキスト属性) // スロット(非応答オブジェクト) コンソールログ(コンテキストスロット) // トリガーイベント(メソッド) コンソールログ(コンテキスト出力) } }
エクスポートデフォルト{ セットアップ(props、{attrs、slots、emit}) { ... } } 2. セットアップ関数の戻り値1. セットアップ関数の戻り値 - オブジェクト
<テンプレート> <!-- テンプレート内で使用すると自動的に解凍されるため、.value は必要ありません --> <div>{{ 読者数 }} {{ book.title }}</div> </テンプレート> <スクリプト> 'vue' から { ref, reactive } をインポートします エクスポートデフォルト{ 設定() { const 読者数 = ref(0) const book = reactive({ title: 'Vue 3 ガイド' }) // テンプレートに公開する 戻る { 読者数、 本 } } } </スクリプト> 注意:セットアップから返された参照は、テンプレート内でアクセスされると自動的にラップ解除されるため、テンプレート内で .value を使用しないでください。 3. レスポンシブシステムAPI1. 反応的
const obj = リアクティブ({ カウント: 0 }) レスポンシブ変換は「深い」ものであり、オブジェクト内のすべてのネストされたプロパティに影響します。 ES2015 プロキシ実装に基づくと、返されるプロキシ オブジェクトは元のオブジェクトと等しくありません。プロキシ オブジェクトのみを使用し、元のオブジェクトに依存しないようにすることをお勧めします。 <テンプレート> <div id="app">{state.count }</div> </テンプレート> <スクリプト> 'vue' から { reactive } をインポートします エクスポートデフォルト{ 設定() { // 状態はリアクティブ状態になりました const state = reactive({ カウント: 0, }) } } </スクリプト> 2. 参照値を受け入れ、応答性の高い変更可能な 定数カウント = ref(0) console.log(count.value) // 0 カウント値++ console.log(count.value) // 1 渡された テンプレート内のアクセス: <テンプレート> <div>{{ カウント }}</div> </テンプレート> <スクリプト> エクスポートデフォルト{ 設定() { 戻る { カウント: ref(0), } }, } </スクリプト> レスポンシブ オブジェクトのプロパティとしてアクセスします。 ref が 定数カウント = ref(0) 定数状態 = リアクティブ({ カウント、 }) console.log(状態.count) // 0 状態数 = 1 console.log(count.value) // 1 注意:既存の 定数otherCount = ref(2) 状態.count = その他のカウント console.log(状態.count) // 2 console.log(count.value) // 1 注意: 定数 arr = リアクティブ([ref(0)]) // ここで .value が必要です コンソール.log(arr[0].値) const map = reactive(新しい Map([['foo', ref(0)]])) // ここで .value が必要です console.log(map.get('foo').value) 型定義: インターフェースRef<T> { 値: T } 関数 ref<T>(値: T): Ref<T> 場合によっては、 const foo = ref<string | number>('foo') // foo の型: Ref<string | number> foo.value = 123 // 合格! 3. 計算されたレスポンシブ (1) 定数カウント = ref(1) const plusOne = 計算された(() => count.value + 1) console.log(plusOne.value) // 2 plusOne.value++ // エラー! (2) 定数カウント = ref(1) const plusOne = 計算された({ 取得: () => count.value + 1, 設定: (値) => { カウント値 = val - 1 }, }) plusOne.値 = 1 console.log(count.value) // 0 型定義: // 読み取り専用関数 computed<T>(getter: () => T): Readonly<Ref<Readonly<T>>> // 変更可能な関数 computed<T>(options: { 取得: () => T 設定: (値: T) => void }): 参照<T> 4. 読み取り専用オブジェクト (レスポンシブまたは通常) または const オリジナル = リアクティブ({ カウント: 0 }) const コピー = 読み取り専用(オリジナル) ウォッチエフェクト(() => { // 依存関係の追跡 console.log(copy.count) }) // オリジナルを変更すると、コピー元のリスナーがトリガーされます。original.count++ // コピーを変更できないため警告が表示されます copy.count++ // 警告! 5. ウォッチエフェクト渡された関数を直ちに実行し、その依存関係をリアクティブに追跡し、依存関係が変更された場合は関数を再実行します。 定数カウント = ref(0) watchEffect(() => console.log(count.value)) //-> 0 を出力 タイムアウトを設定する(() => { カウント値++ //-> 1 を出力 }, 100) 5.1 聞くのをやめるコンポーネントの 場合によっては、戻り値を明示的に呼び出してリスニングを停止することもできます。 const stop = watchEffect(() => { /* ... */ }) // その後stop() 5.2 副作用の解消場合によっては、副作用関数が非同期の副作用を実行し、それが無効な場合 (つまり、完了する前に状態が変わった場合) にクリーンアップする必要があることがあります。したがって、リスニング副作用によって渡される関数は、クリーンアップが失敗したときにコールバックを登録するための入力パラメータとして
ウォッチエフェクト((onInvalidate) => { const トークン = performAsyncOperation(id.value) onInvalidate(() => { // ID が変更されるか、リスニングを停止した場合 // 前の非同期操作をキャンセルします token.cancel() }) }) 無効化コールバックをコールバックから返すのではなく関数を渡して登録する理由は ( データ要求を実行する場合、副作用関数は多くの場合非同期関数になります。 定数データ = ref(null) watchEffect(非同期() => { data.value = fetchData(props.id) を待機します }) 非同期関数は暗黙的に 5.3 副作用リフレッシュタイミング
<テンプレート> <div>{{ カウント }}</div> </テンプレート> <スクリプト> エクスポートデフォルト{ 設定() { 定数カウント = ref(0) ウォッチエフェクト(() => { console.log(カウント.値) }) 戻る { カウント、 } }, } </スクリプト> この例では、 注意:初期化実行はコンポーネント マウント時(() => { ウォッチエフェクト(() => { // ここでDOMまたはテンプレート参照にアクセスできます }) }) 副作用を同期的に再実行する必要がある場合、またはコンポーネントが更新される前に、フラッシュ プロパティを持つオブジェクトをオプションとして渡すことができます (デフォルトは ' // watchEffectを同期的に実行する( () => { /* ... */ }, { フラッシュ: 'sync'、 } ) // watchEffect を実行する( () => { /* ... */ }, { フラッシュ: 'pre'、 } ) 5.4 リスナーのデバッグ
両方のコールバックは、依存関係に関する情報を含むデバッガー イベントを受け取ります。依存関係をチェックするには、次のコールバックにデバッガー ステートメントを記述することをお勧めします。 ウォッチエフェクト( () => { /* 副作用 */ }, { onTrigger(e) { デバッガ }, } )
型定義: 関数watchEffect( 効果: (onInvalidate: InvalidateCbRegistrator) => void、 オプション?: WatchEffectOptions ): ストップハンドル インターフェース WatchEffectOptions { フラッシュ?: 'pre' | 'post' | 'sync' onTrack?: (イベント: DebuggerEvent) => void onTrigger?: (イベント: DebuggerEvent) => void } インターフェース DebuggerEvent { 効果: ReactiveEffect 対象: 任意 タイプ: 操作タイプ キー: 文字列 | シンボル | 未定義 } 型 InvalidateCbRegistrator = (invalidate: () => void) => void タイプ StopHandle = () => void 6. 見る
// ゲッターをリッスンする 定数状態 = リアクティブ({ カウント: 0 }) 時計( () => 状態.count、 (カウント、前のカウント) => { /* ... */ } ) // refを直接聞く 定数カウント = ref(0) ウォッチ(カウント、(カウント、前のカウント) => { /* ... */ }) 6.1 複数のデータソースのリスニング
ウォッチ([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => { /* ... */ }) 6.2 watchEffectと共有される動作
型定義: // 単一のデータソースをリッスンする function watch<T>( ソース: WatcherSource<T>、 折り返し電話: 値: T、 古い値: T、 onInvalidate: InvalidateCbRegistrator ) => 無効、 オプション?: WatchOptions ): ストップハンドル // 複数のデータソースを監視する function watch<T extends WatcherSource<unknown>[]>( 出典: T 折り返し電話: 値: MapSources<T>、 古い値: MapSources<T>、 onInvalidate: InvalidateCbRegistrator ) => 無効、 オプション? : WatchOptions ): ストップハンドル WatcherSource<T> = Ref<T> | (() => T) 型 タイプ MapSources<T> = { [K in keyof T]: T[K]はWatcherSource<infer V>を拡張しますか? V: なし } // 共通プロパティについては、`watchEffect` の型定義を参照してください。インターフェース WatchOptions extends WatchEffectOptions { 即時?: ブール値 // デフォルト: false 深い?: ブール値 } これで、vue3 ドキュメント編成のクイックスタートに関するこの記事は終了です。vue3 ドキュメント編成に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します
>>: MySQL InnoDBストレージエンジンについて簡単に説明します
目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...
H5 レイアウトを設計する場合、通常はバナーに遭遇することになります。例えば、2:1 で表示したい場...
この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
2時間近くかけて、さまざまな方法を試しました。後で、whereでフィルタリングした後のデータ量が1ペ...
<br />原文: http://jorux.com/archives/what-is-...
目次序文:ステップ1: 無料の天気予報インターフェースを見つけるステップ2: 天気予報インターフェー...
今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...
Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...
序文常にエラーが発生するため、MySQL データベースに接続するプロセスを記録します。接続プロセス1...
設定する前に、次の操作を行う必要があります。 1. まずjdk bloggerをインストールします。...
目次1. Dockerイメージ2. 既存のイメージに基づいてインスタンスを作成する3. ローカルテン...
目次Linux - MyCat を使用して MySQL マスター スレーブの読み取り書き込み分離を実...
需要背景最近、Vue を使用してフロントエンド エンジニアリング システムと組み合わせ、以前のデモを...
Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...
SELECT * FROM テーブル名制限m,n; SELECT * FROM テーブル LIMI...