動手實現 Redux(一):dispatch 修改共享狀態


Posted by YongChenSu on 2020-12-14

所有對數據的操作都需要經過 dispatch 函數

原本直接對數據修改

透過 dispatch 再對數據修改

要用 action 告訴 dispatch


index.html

<body>
    <div id='title'></div>
    <div id='content'></div>
</body>

index.js

const appState = {
  title: {
    text: 'React.js 小書',
    color: 'red',
  },
  content: {
    text: 'React.js 小書內容',
    color: 'green'
  }
}

// dispatch 函數
function dispatch (action) {
  switch (action.type) {
    case 'UPDATE_TITLE_TEXT':
      appState.title.text = action.text
      break
    case 'UPDATE_TITLE_COLOR':
      appState.title.color = action.color
      break
    default:
      break
  }
}

// 渲染函數
function renderApp (appState) {
  renderTitle(appState.title)
  renderContent(appState.content)
}

function renderTitle (title) {
  const titleDOM = document.getElementById('title')
  titleDOM.innerHTML = title.text
  titleDOM.style.color = title.color
}

function renderContent (content) {
  const contentDOM = document.getElementById('content')
  contentDOM.innerHTML = content.text
  contentDOM.style.color = content.color
}

renderApp(appState) // first render
dispatch({ type: 'UPDATE_TITLE_TEXT', text: '《React.js 小書》' }) // 修改標題文字
dispatch({ type: 'UPDATE_TITLE_COLOR', color: 'blue' }) // 修改標題顏色
renderApp(appState) // 把新的數據渲染到畫面上

參考資源


#程式導師實驗計畫第四期 #前端 #react book #Redux







Related Posts

[重新理解 C++]  TMP(1): compiling time recursion

[重新理解 C++] TMP(1): compiling time recursion

一些不太好記卻很好用的 CSS 屬性

一些不太好記卻很好用的 CSS 屬性

Closure 閉包

Closure 閉包


Comments