React數(shù)據(jù)綁定

上一節(jié)說到使用react完成布局和html代碼的展示。這一章節(jié)將講解react的數(shù)據(jù)的綁定。

一嗓违、需要使用的React api

1、getInitialState方法图贸,在ES5的語法中用來設(shè)置組件的初始化的數(shù)據(jù)蹂季。在該方法中定義要使用的數(shù)據(jù)模型。
??2疏日、setState方法偿洁,用來更新組件的數(shù)據(jù)并更新視圖
??3、forceUpdate方法沟优,強制更新數(shù)據(jù)和視圖
??4涕滋、refs屬性用來從組件的dom中獲取到實際的ref指定的dom元素
??5、this.state.xxxx能夠獲取當前組件中在getInitialState中的數(shù)據(jù)模型的值
??6挠阁、this.props.xxxx能夠從父組件獲取傳遞過來的值

上一節(jié)中宾肺,定義了兩個組件,展示列表組件和編輯列表組件∏炙祝現(xiàn)完成兩個組件的數(shù)據(jù)的綁定锨用。
分析:1、展示列表組件隘谣,該組件具有刪除和編輯的功能增拥,需要添加兩個事件,remove和edit寻歧。
???2掌栅、編輯列表組件,該組件提供編輯輸入码泛,保存編輯猾封,刪除功能,數(shù)據(jù)由父組件提供弟晚。
???3忘衍、父組件List提供子組件的數(shù)據(jù)和子組件方法的具體實現(xiàn)。
具體代碼如下:

單獨的/**
 * Created by Lenovo on 2017/4/7.
 */
//展示組件
const Item = React.createClass({
//刪除方法
remove(){
    this.props.onRemove(this.props.id);
},
//編輯方法
edit(){
    this.props.onEdit(this.props.id,this.props.value);
},
render(){
    return <li className="list-group-item">
        {this.props.value}//此處為通過props來接受從父組件傳遞過來的數(shù)據(jù)并綁定到虛擬的dom上
        <a href="#" className="item-right glyphicon glyphicon-remove" onClick={this.remove}></a>
        <a href="#" className="item-right glyphicon glyphicon-edit" onClick={this.edit}></a>
    </li>
}
});

//編輯組件
const EditItem = React.createClass({
getInitialState(){
    return{
        value:''
    }
},
//將錄入的數(shù)據(jù)存入到當前的組件的狀態(tài)中
changeHandle(event){
    this.setState({value:event.target.value});
},
//保存方法調(diào)用父組件中的保存方法
save(){
    this.props.onSave(this.props.id,this.state.value);
},
//刪除方法調(diào)用父組件中的刪除方法
remove(){
    this.props.onRemove(this.props.id);
},
render(){
        return <li className="list-group-item">
            <input type="text" onChange={this.changeHandle} defaultValue={this.props.value}/>
            <a href="#" className="margin-leftandright-5 glyphicon glyphicon-share" onClick={this.save}></a>
            <a href="#" className="margin-leftandright-5 glyphicon glyphicon-remove" onClick={this.remove}></a>
        </li>
}
});

//容器組件
const List = React.createClass({
getInitialState(){
    return{
        key:0,
        List:new Map(),
        eList:new Map()
    }
},
//添加方法的具體實現(xiàn)
add(){
    const key=this.state.key++;
    this.state.eList.set(key,'');
    this.forceUpdate();
},
//保存方法的具體實現(xiàn)
save(id,value){
  this.state.List.set(id,value);
  this.state.eList.delete(id);
  this.forceUpdate();
},
 //展示列表刪除方法的具體實現(xiàn)
remove(id){
  this.state.List.delete(id);
  this.forceUpdate();
},
 //編輯列表刪除方法的具體實現(xiàn)
eremove(id){
    this.state.eList.delete(id);
    this.forceUpdate();
},
//展示列表編輯方法的具體實現(xiàn)
edit(id,value){
    this.state.eList.set(id,value);
    this.state.List.delete(id);
    this.forceUpdate();
},
render(){
    const ListDom=[];
    const EditListDom=[];
    for(let entity of this.state.List){
        ListDom.push(<Item value={entity[1]} id={entity[0]}
                           onRemove={this.remove}
                           onEdit={this.edit}
        />)
    }
    for(let entity of this.state.eList){
        EditListDom.push(<EditItem value={entity[1]}
                                   id={entity[0]}
                                   onSave={this.save}
                                   onRemove={this.eremove}
        />)
    }
    return <div>
        <button className="menu-btn btn btn-success glyphicon glyphicon-plus" onClick={this.add}>
            添加心事
        </button>
        <ul className="list-group">
            {ListDom}
            {EditListDom}
        </ul>
    </div>
  }
});

 //渲染
ReactDOM.render(
        <List/>,
        document.getElementById('content')
);

本節(jié)講了數(shù)據(jù)和dom元素綁定卿城,該項目還存在很多的不好的交互行為枚钓,需要進行優(yōu)化,下一節(jié)將對該項目進行優(yōu)化瑟押。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搀捷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫩舟,老刑警劉巖氢烘,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異家厌,居然都是意外死亡播玖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門饭于,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜀踏,“玉大人,你說我怎么就攤上這事掰吕」玻” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵殖熟,是天一觀的道長局待。 經(jīng)常有香客問我,道長菱属,這世上最難降的妖魔是什么钳榨? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮纽门,結(jié)果婚禮上重绷,老公的妹妹穿的比我還像新娘。我一直安慰自己膜毁,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布愤钾。 她就那樣靜靜地躺著瘟滨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪能颁。 梳的紋絲不亂的頭發(fā)上杂瘸,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音伙菊,去河邊找鬼败玉。 笑死,一個胖子當著我的面吹牛镜硕,可吹牛的內(nèi)容都是我干的运翼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼兴枯,長吁一口氣:“原來是場噩夢啊……” “哼血淌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤悠夯,失蹤者是張志新(化名)和其女友劉穎癌淮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沦补,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乳蓄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夕膀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虚倒。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖店诗,靈堂內(nèi)的尸體忽然破棺而出裹刮,到底是詐尸還是另有隱情,我是刑警寧澤庞瘸,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布捧弃,位于F島的核電站,受9級特大地震影響擦囊,放射性物質(zhì)發(fā)生泄漏违霞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一瞬场、第九天 我趴在偏房一處隱蔽的房頂上張望买鸽。 院中可真熱鬧,春花似錦贯被、人聲如沸眼五。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽看幼。三九已至,卻和暖如春幌陕,著一層夾襖步出監(jiān)牢的瞬間诵姜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工搏熄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棚唆,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓心例,卻偏偏與公主長得像宵凌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子止后,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 原教程內(nèi)容詳見精益 React 學習指南摆寄,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,813評論 1 18
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評論 25 707
  • 自己最近的項目是基于react的微饥,于是讀了一遍react的文檔逗扒,做了一些記錄(除了REFERENCE部分還沒開始讀...
    潘逸飛閱讀 3,358評論 1 10
  • 本筆記基于React官方文檔,當前React版本號為15.4.0欠橘。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,661評論 14 128
  • 如果可以擁有超能力肃续,我希望自己能夠處于永恒臨在狀態(tài)黍檩,與萬事萬物都有強烈的聯(lián)結(jié)感,一體感始锚,活在當下刽酱,同時大腦被開發(fā)1...
    藍夢_寶貝閱讀 753評論 0 1