React實(shí)現(xiàn)todolist功能
一、index.js
ReactDOM.render(
<React.StrictMode>
<TodoList />
</React.StrictMode>,
document.getElementById('root')
);
二、TodoList
1、constructor
constructor(props) {
super(props);
this.state = {
inputValue: '',
list: []
}
}
2、render
render() {
return (
<React.Fragment>
<div>
{/*label標(biāo)簽的作用,擴(kuò)大點(diǎn)擊范圍*/}
<label htmlFor='insertArea'>輸入內(nèi)容</label>
<input
id='insertArea'
className={'inputStyle'}
value={this.state.inputValue}
onChange={event => this.handleInputChangle(event)}/>
<button onClick={event => this.handleButtonVlue(event)}>提交</button>
<hr/>
<ul>
{this.getTodoList()}
</ul>
</div>
</React.Fragment>
)
}
3、getTodoList
getTodoList() {
return (
this.state.list.map((value, index) => {
return <TodoItem2
key={index}
itemVlue={value}
itemIndex={index}
itemDelete={this.handleItemDelete.bind(this)}>
{/*這塊需要強(qiáng)制綁定為父組件的this,否則在子組件中找不到*/}
</TodoItem2>
})
);
}
4、事件函數(shù)
/**
* 監(jiān)聽輸入框變化
**/
handleInputChangle(e) {
const value = e.target.value;
this.setState(() => ({
inputValue: value
}))
}
/**
* 監(jiān)聽點(diǎn)擊按鈕
**/
handleButtonVlue(e) {
this.setState((prevStatus) => ({
list: [...prevStatus.list, this.state.inputValue],
inputValue: ''
}))
}
/**
* 監(jiān)聽點(diǎn)擊item刪除
**/
handleItemDelete(index) {
this.setState((preStatus) => {
const list = [...preStatus.list];
list.splice(index, 1)
return {
list
}
});
}
5、網(wǎng)絡(luò)請(qǐng)求
使用Charles代理網(wǎng)絡(luò),安裝證書,設(shè)置端口,在手機(jī)上面打開網(wǎng)絡(luò)WIFI,設(shè)置代理IP和端口,這樣就能監(jiān)聽到手機(jī)訪問(wèn)的網(wǎng)絡(luò),攔截請(qǐng)求,代理本地地址,返回本地?cái)?shù)據(jù)。

需要注意的是charles識(shí)別不出來(lái)localhost,需要在package.json中改成設(shè)置:
* "start": "set PORT=3000 HOST=localhost.charlesproxy.com && react-scripts start",
訪問(wèn)時(shí)候使用:
http://localhost.charlesproxy.com:3000/
(1)引入axios
yarn yarn add axios
(2)在componentDidMount進(jìn)行網(wǎng)絡(luò)請(qǐng)求
/**
* 這塊進(jìn)行網(wǎng)絡(luò)請(qǐng)求
*/
componentDidMount() {
axios.get('api/todolist')
.then((res) => {
this.setState({
list: [...res.data]
})
}).catch(() => {
alert('發(fā)生錯(cuò)誤')
})
}
這樣運(yùn)行程序的時(shí)候初始值就有了數(shù)據(jù)了。
總結(jié):當(dāng)前組件的state或者prop發(fā)生改變的時(shí)候,App中的render函數(shù)就會(huì)重新執(zhí)行。做到數(shù)據(jù)和頁(yè)面同步。當(dāng)父組件發(fā)生變化重新執(zhí)行的時(shí)候,子組件的render也會(huì)被重新執(zhí)行一次。
到此這篇關(guān)于React實(shí)現(xiàn)todolist功能的文章就介紹到這了,更多相關(guān)React實(shí)現(xiàn)todolist內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react-router browserHistory刷新頁(yè)面404問(wèn)題解決方法
本篇文章主要介紹了react-router browserHistory刷新頁(yè)面404問(wèn)題解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-12-12
React DOM-diff 節(jié)點(diǎn)源碼解析
這篇文章主要為大家介紹了React DOM-diff節(jié)點(diǎn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
再次談?wù)揜eact.js實(shí)現(xiàn)原生js拖拽效果引起的一系列問(wèn)題
React 起源于 Facebook 的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來(lái)架設(shè) Instagram 的網(wǎng)站.本文給大家介紹React.js實(shí)現(xiàn)原生js拖拽效果,需要的朋友一起學(xué)習(xí)吧2016-04-04
React修改數(shù)組對(duì)象的注意事項(xiàng)及說(shuō)明
這篇文章主要介紹了React修改數(shù)組對(duì)象的注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
詳解如何在React中優(yōu)雅的使用addEventListener
這篇文章主要為大家詳細(xì)介紹了如何在React中優(yōu)雅的使用addEventListener,文中的示例代碼簡(jiǎn)潔易懂,對(duì)大家學(xué)習(xí)React有一定的幫助,需要的可以參考一下2023-01-01
React狀態(tài)更新的優(yōu)先級(jí)機(jī)制源碼解析
這篇文章主要為大家介紹了React狀態(tài)更新的優(yōu)先級(jí)機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
JavaScript React如何修改默認(rèn)端口號(hào)方法詳解
這篇文章主要介紹了JavaScript React如何修改默認(rèn)端口號(hào)方法詳解,文中通過(guò)步驟圖片解析介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

