откуда отправка в этой строке? export const setAlert = (msg, alertType, timeout = 5000) => отправка => - PullRequest
0 голосов
/ 14 марта 2020

Я наткнулся на этот код. Он / она создает действие для редукса в приложении «Реакция-редукция». Я не понимаю, откуда идет отправка. Можете ли вы объяснить, пожалуйста, это также хорошая практика?

</p>

<code>import uuid from 'uuid';
import {SET_ALERT,REMOVE_ALERT} from './types';
export const setAlert = (msg, alertType,timeout=5000) =>dispatch =>{
    const id = uuid.v4();
    dispatch ({
        type:SET_ALERT,
        payload:{msg,
            alertType,
            id}
    }); 

    setTimeout(()=>dispatch({type:REMOVE_ALERT,payload:id}),timeout)}
</code>

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Это исходит от mapDispatchToProps:

// action
export const action = (params) => async (dispatch) => // it can be async btw
  actionCodeHere()

// component
import {action as importedAction} from 'action'

const component = ({action}) => {
  React.useEffect(() => { action(params) }, [])

  return <div/>
}

const mapDispatchToProps = {
  action: importedAction
} // just object

export default connect(null, mapDispatchToProps)(component)

Это хорошая практика?

Я думаю, что это лучше, чем многие другие способы, которые я видел (особенно саксофонная сага, бессмысленная и беспощадная) , здесь меньше кода, чем когда mapDispatchToProps является функцией.

Проще всего импортировать dispatch из хранилища непосредственно в файле действий и вообще не использовать mapDispatchToProps, но я никогда не видел такого подхода, похоже это плохая практика.

1 голос
/ 14 марта 2020

Я предполагаю, что он использует redux-thunk, который работает как промежуточное ПО. setAlert возвращает функцию, которая вызывается с диспетчеризацией в качестве первого параметра этой функции. Может быть, это поможет понять, если вы немного очистите его

export const setAlert = (msg, alertType,timeout=5000) => {
    const id = uuid.v4();

    return (dispatch) => {
        dispatch ({
            type:SET_ALERT,
            payload:{
                msg,
                alertType,
                id
            }
        }); 
    };

Обычно я использую его в тех случаях, когда мне нужно работать с асин c функциями внутри действия, такими как ajax запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...