綁定文本框
目前成都創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、南開網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
用React寫一個文本框:
class TextBox extends Component {
constructor(props) {
super(props);
this.state = { txtValue: 'hello world' };
this.setTxtValue = this.setTxtValue.bind(this);
}
setTxtValue(e) {
this.setValue({txtValue: e.target.value})
}
render() {
return (
)
}
}
為了取數(shù)據(jù)要專門寫個事件處理,還要bind,很啰嗦,要是來十個文本框,手指受不了,眼睛也受不了。
讓我們看看VUE的偉大吧
一眼就看到底了,爽得不要不要的。
入了門就看個更有趣的例子,做個問卷調(diào)查:
既然是數(shù)據(jù)驅(qū)動,就先設(shè)計一下數(shù)據(jù)模型:
sessions:[ // 每個問題及選項稱為一個session
{
question: '3. Which langurage are you using?', //問題文本
type: 'checkbox', // 問題類型,單選、多選
answer: [], // 多選題答案
value: '', // 單選題答案
errMsg: '', // 錯誤信息
options: [ // 答案的選項
{
label: 'Java',
value: '1',
},
... // 更多的選項
]
},
... // 更多的session
]
設(shè)計一個組件,顯示session
{{session.errMsg}}
接收并顯示一個session,會根據(jù)session的類型做不同的綁定:
Vue.use(Vuex);
var state = {
sessions: [
{
question: '3. Which langurage are you using?',
type: 'checkbox',
answer: [],
value: '',
errMsg: '',
options: [
{
label: 'Java',
value: '1',
},
{
label: 'python',
value: '2',
},
{
label: 'C',
value: '3',
},
{
label: 'swift',
value: '4',
},
]
},
...
]
}
var actions = {
submitAnswer({ commit, state }) {
...
}
}
const store = new Vuex.Store({
state, actions
})
export default store;
用過Redux的同學(xué)看出端倪了嗎?不用dispatch,不用reducer,store里面的數(shù)據(jù)直接綁定在組件上,一旦變化,馬上觸發(fā)UI更新,省去了很多無聊的代碼。還有,即使是store里面深層的數(shù)據(jù)發(fā)生變化,vue可以很自然地監(jiān)察,然后更新頁面。不像React,要析構(gòu)賦值或者combineReducer。
接下來只要再來一段,引入組件,循環(huán)使用
就可以做出以下的效果了
在VUE中,dispatch用于觸發(fā)異步action,例如提交數(shù)據(jù)等,這里只討論數(shù)據(jù)綁定。
相對于React,VUE的數(shù)據(jù)綁定減少了冗余的代碼,讓開發(fā)者可以更專注于業(yè)務(wù)。