反应Usereducer动作有效负载

时间:2020-11-05 08:18:54

标签: reactjs react-hooks action payload

在下面的代码中,我无法理解action.payload。请以简单的方式清除它。

import React, {useContext} from 'react'
import NotesContext from '../context'

function Note({ note }) {
    const {dispatch}  = useContext(NotesContext)
    return (
        <div className="note">
            <p>{note.text}</p>
            <div className="btn-container">
            <button onClick={() => dispatch({type: 'SET_CURRENT_NOTE', payload:note})} className="edit">Edit</button>
            <button onClick={() => dispatch({type: 'DELETE_NOTE', payload:note.id})} className="delete">Delete</button>
            </div>
        </div>
    )
} 
export default Note



export default function reducer(state, action) {
 switch(action.type) {
         case 'SET_CURRENT_NOTE':
         return {
             ...state,
             currentNote: action.payload
         }
         case 'DELETE_NOTE':
           const deleteNotes = state.notes.filter(
               note => note.id !== action.payload
           )

           return {
               ...state,
               notes: deleteNotes
           }
         default:
         return state;
 }
}

1 个答案:

答案 0 :(得分:0)

因此,当分派动作时,它会陷入减速器中。这段代码正在调度动作

dispatch({type: 'SET_CURRENT_NOTE', payload:note})

可以这样写:

const action = {type: "SET_CURRENT_NOTE", payload: note}

dispatch(action)

现在在化简器中,您可以访问传递到dispatch的操作对象。 您可以从该对象通过点符号访问属性typepayload,如下所示:

action.type
action.payload

然后,您只需在切换的情况下捕获匹配的action.type,然后使用化简器中返回的对象来更新状态。