表單的非常簡單的示例,該表單接受GitHub用戶名,並在收到GitHub用戶名後submit
事件,它會向GitHub API詢問用戶信息,並打印出來。
表單的非常簡單的示例,該表單接受GitHub用戶名,並在收到GitHub用戶名後submit
事件,它會向GitHub API詢問用戶信息,並打印出來。
這段代碼創建了可重用的卡片成分。當您在input
由...管理的字段形式組件,此名稱是綁定到其狀態。
什麼時候新增卡按下,清除輸入框清除輸入形式。userName
的狀態形式成分。
該示例除了使用React之外,還使用了Axios庫。這是一個很好的有用且輕量級的庫,用於處理網絡請求。將其添加到Codepen的“筆”設置中,或使用npm install axios
。
輸出
代碼
我們首先創建Card
組件,它將顯示從GitHub收集的我們的圖像和詳細信息。它通過道具獲取數據,使用
props.avatar_url
用戶頭像props.name
用戶名props.blog
用戶網站網址const Card = props => { return ( <div style={{ margin: '1em' }}> <img alt="avatar" style={{ width: '70px' }} src={props.avatar_url} /> <div> <div style={{ fontWeight: 'bold' }}>{props.name}</div> <div>{props.blog}</div> </div> </div> ) }
我們創建了這些組件的列表,這些列表將由父組件在cards
支持CardList
,使用對其進行迭代map()
並輸出一張卡片清單:
const CardList = props => (
<div>
{props.cards.map(card => (
<Card {...card} />
))}
</div>
)
父組件是App,它存儲cards
陣列以自己的狀態使用useState()
鉤:
const App = () => {
const [cards, setCards] = useState([])
return (
<div>
<CardList cards={cards} />
</div>
)
}
涼爽的!我們現在必須有一種方法可以向GitHub詢問單個用戶名的詳細信息。我們將使用Form
組件,我們在其中管理自己的狀態(username
),並通過以下方式要求GitHub提供有關使用其公共API的用戶的信息:Axios:
const Form = props => {
const [username, setUsername] = useState('')
handleSubmit = event => {
event.preventDefault()
<span style="color:#a6e22e">axios</span>.<span style="color:#a6e22e">get</span>(<span style="color:#e6db74">`https://api.github.com/users/</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">username</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>).<span style="color:#a6e22e">then</span>(<span style="color:#a6e22e">resp</span> => {
<span style="color:#a6e22e">props</span>.<span style="color:#a6e22e">onSubmit</span>(<span style="color:#a6e22e">resp</span>.<span style="color:#a6e22e">data</span>)
<span style="color:#a6e22e">setUsername</span>(<span style="color:#e6db74">''</span>)
})
}
return (
<form onSubmit={handleSubmit}>
<input
type=“text”
value={username}
onChange={event => setUsername(event.target.value)}
placeholder=“GitHub username”
required
/>
<button type=“submit”>Add card</button>
</form>
)
}
提交表單後,我們將handleSubmit
事件,在網絡通話後,我們致電props.onSubmit
通過父母(App
)我們從GitHub獲得的數據。
我們將其添加到App
,傳遞一種將新卡添加到卡列表的方法,addNewCard
, 就像它一樣onSubmit
支柱:
const App = () => {
const [cards, setCards] = useState([])
addNewCard = cardInfo => {
setCards(cards.concat(cardInfo))
}
return (
<div>
<Form onSubmit={addNewCard} />
<CardList cards={cards} />
</div>
)
}
最後,我們渲染該應用程序:
ReactDOM.render(<App />, document.getElementById('app'))
這是我們的小React應用程序的完整源代碼:
const { useState } = React
const Card = props => {
return (
<div style={{ margin: ‘1em’ }}>
<img alt=“avatar” style={{ width: ‘70px’ }} src={props.avatar_url} />
<div>
<div style={{ fontWeight: ‘bold’ }}>{props.name}</div>
<div>{props.blog}</div>
</div>
</div>
)
}
const CardList = props => <div>{props.cards.map(card => <Card {…card} />)}</div>
const Form = props => {
const [username, setUsername] = useState(’’)
handleSubmit = event => {
event.preventDefault()
<span style="color:#a6e22e">axios</span>
.<span style="color:#a6e22e">get</span>(<span style="color:#e6db74">`https://api.github.com/users/</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">username</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>)
.<span style="color:#a6e22e">then</span>(<span style="color:#a6e22e">resp</span> => {
<span style="color:#a6e22e">props</span>.<span style="color:#a6e22e">onSubmit</span>(<span style="color:#a6e22e">resp</span>.<span style="color:#a6e22e">data</span>)
<span style="color:#a6e22e">setUsername</span>(<span style="color:#e6db74">''</span>)
})
}
return (
<form onSubmit={handleSubmit}>
<input
type=“text”
value={username}
onChange={event => setUsername(event.target.value)}
placeholder=“GitHub username”
required
/>
<button type=“submit”>Add card</button>
</form>
)
}
const App = () => {
const [cards, setCards] = useState([])
addNewCard = cardInfo => {
setCards(cards.concat(cardInfo))
}
return (
<div>
<Form onSubmit={addNewCard} />
<CardList cards={cards} />
</div>
)
}
ReactDOM.render(<App />, document.getElementById(‘app’))
在Codepen上查看https://codepen.io/flaviocopes/pen/oJLyeY
免費下載我的反應手冊
更多反應教程:
- 一個React簡單的應用示例:通過API獲取GitHub用戶信息
- 用React構建一個簡單的計數器
- 用於React開發的VS Code設置
- 如何通過React Router將道具傳遞給子組件
- 使用Electron和React創建一個應用
- 教程:使用React創建電子表格
- 學習React的路線圖
- 了解如何使用Redux
- JSX入門
- 樣式化的組件
- Redux Saga簡介
- React Router簡介
- React簡介
- 反應組件
- 虛擬DOM
- 反應事件
- 反應狀態
- 反應道具
- 反應片段
- React Context API
- 反應PropTypes
- 反應概念:聲明式
- React:如何在點擊時顯示其他組件
- 如何在React JSX內部循環
- 道具與狀態在React中
- 您應該使用jQuery還是React?
- 使用React需要知道多少JavaScript?
- 蓋茨比介紹
- 如何在React中引用DOM元素
- React中的單向數據流
- 反應高階組件
- 反應生命週期事件
- 反應概念:不變性
- 反應概念:純度
- React鉤子簡介
- create-react-app簡介
- 反應概念:組成
- React:演示組件與容器組件
- React中的代碼拆分
- 使用React進行服務器端渲染
- 如何安裝React
- React中的CSS
- 在React中使用SASS
- 在React中處理表單
- 反應嚴格模式
- 反應門戶
- 反應渲染道具
- 測試React組件
- 如何在React中將參數傳遞給事件處理程序
- 如何處理React中的錯誤
- 如何在JSX中返回多個元素
- React中的條件渲染
- 反應,如何將道具轉移到子組件
- 如何在React中獲取輸入元素的值
- 如何使用useState React鉤子
- 如何使用useCallback React鉤子
- 如何使用useEffect React鉤子
- 如何使用useMemo React鉤子
- 如何使用useRef React鉤子
- 如何使用useContext React鉤子
- 如何使用useReducer React鉤子
- 如何將您的React應用程序連接到相同來源的後端
- 到達路由器教程
- 如何使用React Developer Tools
- 如何學習React
- 如何調試React應用程序
- 如何在React中呈現HTML
- 如何修復`dangerouslySetInnerHTML`與React中的錯誤不匹配
- 我如何解決React登錄表單狀態和瀏覽器自動填充的問題
- 如何在本地主機上的React應用程序中配置HTTPS
- 如何修復React中的“在渲染其他組件時無法更新組件”錯誤
- 我可以在條件內使用React掛鉤嗎?
- 將useState與對像一起使用:如何更新
- 如何使用React和Tailwind在代碼塊中移動
- React,添加到DOM時將焦點放在React中的一個項目上
- 反應,在doubleclick上編輯文本