React Search Photo Demo
本次練習要在 Vite 上使用 React,並實作一個搜尋表單,輸入文字並透過 Unsplash API 來搜尋並顯示圖片。

前置作業
使用 Vite 建立專案,並使用 Semantic UI 的 CDN 來做基本的美化:

Vite 建立專案 react-form-demo

$ yarn
``` create @vitejs/app react-form-demo --template react
$ cd react-form-demo
$ yarn

在 index.html 貼上 Semantic UI CDN Link

```html
https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css
image-20210709232223428
完成基本介面
image-20210709232601364
// App.jsx
import React from 'react'
import SearchBar from './components/SearchBar'
function App() {
return (
<div className='ui container' style={{ marginTop: 20 }}>
<SearchBar />
</div>
)
}
export default App
image-20210709233718975
// .components/SearchBar.jsx
import React from 'react'
const SearchBar = () => {
return (
<div className='ui segment'>
<form className='ui form'>
<div className='field'>
<label htmlFor='search'>Search</label>
<input id='search' type='text' />
</div>
</form>
</div>
)
}
export default SearchBar
image-20210710204127741
測試輸入功能
建立一個 function,並 console.log 出輸入結果
const handleInput = (e) => { console.log(e.target.value) }
放到 中,要注意的是,是使用 onChange
這時候輸入的結果,就會在 console.log 顯示
把輸入的結果放到 state 中管理
使用 useState 這個 Hook,建立一個 state
import React, { useState } from 'react'
const [state, setState] = useState({ inputText: '' })把輸入的結果,放到 inputText
const handleInput = (e) => { setState({ inputText: e.target.value }) }
使用 React Developer Tools,就可以看到 inputText 顯示的是輸入的字串
在 加上 value={state.inputText}
讓 App 可以跨組件拿到 SearchBar 輸入的資料
這一步驟是要在 App 建立一個函式,並透過 props 來讓 SearchBar 回傳輸入的結果。
在 App 建立函式
const onSearchSubmit = (input) => { console.log(input) }
在 SearchBar 傳入 props
在 SearchBar 建立一個函式,讓輸入的結果,透過 submit 傳到 App
先透過解構從 props 取出 handleSubmit,以利後面操作
const { handleSubmit } = props在 SearchBar 建立函式,讓 handleSubmit 傳入輸入的資料,記得加入 preventDefault 以避免重整頁面
const handleFormSubmit = (e) => { e.preventDefault() handleSubmit(state.inputText) }
在