2017-01-27 14 views
0

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

export const uniqueUsernameCheck = _.debounce(({ username }) => { 
    axios.post(`${API_URL}/signup/usernamecheck`, { username }) 
    .then((res) => { 
     console.log('Is unique?', res.data.status); 
    }) 
    .catch((error) => { 
     console.log(error); 
    }); 
}, 500); 

Однако, используя redux-thunk Я пытаюсь изменить функцию, чтобы я мог отправлять действия в пределах моей функции. Это то, что у меня есть:

export const uniqueUsernameCheck = _.debounce(({ username }) => { 
    console.log('I can see this'); 
    return (dispatch) => { 
    console.log('But not this'); 
    dispatch({ type: USERNAME_CHECK }); 
    axios.post(`${API_URL}/signup/usernamecheck`, { username }) 
     .then((res) => { 
     dispatch(authError(res.data.error)); 
     }) 
     .catch((error) => { 
     console.log(error); 
     }); 
    }; 
}, 500); 

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

EDIT:

Это, как я создал свой магазин

const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));

ответ

1

Взгляните на это:

http://codepen.io/anon/pen/egeOyJ

const userService = _.debounce(username => { 
    setTimeout(
    ()=>{ 
     console.log('userService called after debounce. username:', username) 
    } 
    ,1000) 
}, 500) 

const uniqueUsernameCheck = (username) => (dispatch) => { 
    console.log('I can see this') 
    userService(username) 
} 

console.log('begin') 
const reducers = (action) => {console.log(action)} 
const store = Redux.createStore(
    reducers, 
    {}, 
    Redux.applyMiddleware(ReduxThunk.default)) 

store.dispatch(uniqueUsernameCheck('rafael')) 
store.dispatch(uniqueUsernameCheck('rafael')) 
store.dispatch(uniqueUsernameCheck('rafael')) 
+0

Два соображения: вы должен отправить функцию, которая получает «отправку» напрямую; вы должны создать функцию debounce только один раз. –