相比較於VUE, 我的在開發過程當中更加傾向於REACT,html
不是由於REACT更好用,相反是更難用,就是你們所說的學習曲線陡,node
可是REACT我的以爲正是由於他難用,或者說,代碼風格更加趨近於原生JS,尤爲是ES6的面向對象的編程思想,能夠一邊開發,一邊提高本身的原生js熟練程度,不至於過分產生框架依賴。react
下面以一個點贊事件爲例編程
採用純js開發思想,因爲沒有JSX編譯 , 因此 暫時使用 模版字符串 作替代。bash
<body>
<div id="root"></div>
<!--root將會被做爲根節點,在裏面渲染一個按鈕,實現點贊事件-->
<script>
var root = document.getElementById('root');
//1. 設置初始化狀態
var state = {
like : false,
color:'black'
}
//2. 經過setState觸發修改數據觸發渲染事件
function setState (newState){
state = {
...state,
...newState
}
console.log(state)
render();
}
// 加載頁面進行初始化渲染
render();
// 事件 調用該事件 觸發 setState 進行渲染
function handleClick(){
setState({
like : !state.like,
color: state.like? 'black' :'red'
})
}
// 渲染頁面函數
function render(){
root.innerHTML =
`
<button style="color:${state.color}" onclick="handleClick()">${state.like? '已贊':'點贊'}</button>
`
}
</script>
</body>
複製代碼
<body>
<div id="root"></div>
<!--在這個節點上面渲染-->
<script>
var root = document.getElementById('root')
// 這個是父類
class Component {
setState(newState) {
this.state = {
...this.state,
...newState
}
return this;
}
}
// 這個是子類 按鈕 繼承父類的setState功能
class Button extends Component {
constructor() {
super()
this.state = {
like: false
}
this.render()
}
render() {
const state = this.state;
const node = `<button style="color:${state.like ? 'red' : 'black'}" onclick="this.handleClick()">${state.like ? '已贊' : '點贊'}</button>`;
return node;
}
}
// 這個是子類 標題 繼承父類的setState功能
class Title extends Component {
constructor() {
super()
this.state = {
text: '這是一個標題'
}
}
render() {
return `<h1>${this.state.text}</h1>`
}
}
//這個做爲包裝容器,
class Wrap {
constructor() {
}
render() {
return `
// 構造渲染子類
${new Title().render()}
// 能夠調用修改本身的狀態, 每個模塊都相互獨立,互不影響。
${new Button().setState({ like: true }).render()}
${new Title().render()}
${new Button().render()}
`
}
}
//將wrap渲染到 html中
root.innerHTML = new Wrap().render();
</script>
</body>
複製代碼