Rumah >hujung hadapan web >tutorial js >Menambah carian suara ke aplikasi React
Kod Lengkap tersedia di GitHub, dan demo kerja disediakan pada akhir.
Konsep Utama:
useVoice
Memperluaskan fungsi dengan mengintegrasikan ciri carian buku menggunakan cangkuk tersuai lain (useBookFetch
API Ucapan Web mempunyai sokongan penyemak imbas terhad. Pastikan anda menggunakan penyemak imbas yang serasi (semak MDN untuk maklumat keserasian terkini).
Contoh mudah menggunakan API Ucapan Web:
Kod ini memberi instantiates
, menambah pendengar acara<code class="language-javascript">const SpeechRecognition = webkitSpeechRecognition; const speech = new SpeechRecognition(); speech.onresult = (event) => { console.log(event); }; speech.start();</code>untuk mengendalikan transkripsi pertuturan, dan mula mendengar. Penyemak imbas akan meminta akses mikrofon. Selepas ucapan,
menyediakan teks yang ditranskripsikan. SpeechRecognition
onresult
Acara onresult
menyampaikan objek
. Elemen pertama array ini memegang teks yang ditranskripsikan. onresult
SpeechRecognitionEvent
Kod asas ini boleh dijalankan di Chrome Devtools atau fail JavaScript. Mari kita mengintegrasikannya ke dalam aplikasi React. results
Menggunakan ucapan web dalam React:
Buat projek React baru:
Gantikan lalaidengan yang berikut, yang menggabungkan API Ucapan Web:
<code class="language-bash">npx create-react-app book-voice-search cd book-voice-search npm start</code>
Komponen yang dipertingkatkan ini menguruskan keadaan pendengaran (App.js
), menyimpan teks transkripsi (
<code class="language-javascript">// App.js import React, { useState, useEffect } from "react"; import "./index.css"; import Mic from "./microphone-black-shape.svg"; // Import your microphone image let speech; if (window.webkitSpeechRecognition) { const SpeechRecognition = webkitSpeechRecognition; speech = new SpeechRecognition(); speech.continuous = true; // Enable continuous listening } else { speech = null; } const App = () => { const [isListening, setIsListening] = useState(false); const [text, setText] = useState(""); const listen = () => { setIsListening(!isListening); if (isListening) { speech.stop(); } else { speech.start(); } }; useEffect(() => { if (!speech) return; speech.onresult = (event) => { setText(event.results[event.results.length - 1][0].transcript); }; }, []); // ... (rest of the component remains the same) }; export default App;</code>menetapkan pendengar
. isListening
text
listen
cangkuk suara React Custom yang boleh diguna semula: useEffect
onresult
Untuk meningkatkan kebolehgunaan semula kod, buat cangkuk tersuai useVoice.js
:
<code class="language-javascript">const SpeechRecognition = webkitSpeechRecognition; const speech = new SpeechRecognition(); speech.onresult = (event) => { console.log(event); }; speech.start();</code>
cangkuk ini merangkumi logik pengiktirafan suara. Sekarang, kemas kini App.js
untuk menggunakan cangkuk ini:
<code class="language-bash">npx create-react-app book-voice-search cd book-voice-search npm start</code>
Ini memudahkan App.js
dan mempromosikan penggunaan semula kod.
Fungsi Carian Suara Buku:
Buat satu lagi cangkuk tersuai useBookFetch.js
untuk mengendalikan carian buku:
<code class="language-javascript">// App.js import React, { useState, useEffect } from "react"; import "./index.css"; import Mic from "./microphone-black-shape.svg"; // Import your microphone image let speech; if (window.webkitSpeechRecognition) { const SpeechRecognition = webkitSpeechRecognition; speech = new SpeechRecognition(); speech.continuous = true; // Enable continuous listening } else { speech = null; } const App = () => { const [isListening, setIsListening] = useState(false); const [text, setText] = useState(""); const listen = () => { setIsListening(!isListening); if (isListening) { speech.stop(); } else { speech.start(); } }; useEffect(() => { if (!speech) return; speech.onresult = (event) => { setText(event.results[event.results.length - 1][0].transcript); }; }, []); // ... (rest of the component remains the same) }; export default App;</code>
cangkuk ini mengambil data buku dari perpustakaan terbuka berdasarkan nama pengarang. Akhirnya, mengintegrasikan ini ke App.js
untuk memaparkan hasil carian:
<code class="language-javascript">// useVoice.js import { useState, useEffect } from 'react'; // ... (SpeechRecognition setup remains the same) const useVoice = () => { // ... (state and listen function remain the same) useEffect(() => { // ... (onresult event listener remains the same) }, []); return { text, isListening, listen, voiceSupported: speech !== null }; }; export { useVoice };</code>
Ini melengkapkan aplikasi carian buku yang dikawal suara.
Demo:
[masukkan codesandbox atau pautan demo yang serupa di sini]
Kesimpulan:
Contoh ini mempamerkan kuasa dan kesederhanaan API Ucapan Web untuk menambah interaksi suara untuk bertindak balas. Ingat keserasian penyemak imbas dan batasan ketepatan yang berpotensi. Kod penuh boleh didapati di GitHub.
Atas ialah kandungan terperinci Menambah carian suara ke aplikasi React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!