Skip to content

Instantly share code, notes, and snippets.

@kenmori
Last active May 29, 2019 02:26
Show Gist options
  • Save kenmori/27df26cafaa9f28d4a358cf9dd32d728 to your computer and use it in GitHub Desktop.
Save kenmori/27df26cafaa9f28d4a358cf9dd32d728 to your computer and use it in GitHub Desktop.
[React x GraphQL x Rx.js] 入力された値を購読して1.5秒後にdispatchする検索機能

[React x GraphQL x Rx.js] 入力された値を購読して1.5秒後にdispatchする検索機能

import { Subject } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
.
.
.

const onSearch$ = new Subject().pip(debounceTime(1500))

const HOGE = () => {
  const [state, dispatch] = useReducer(initialState, dispatch);
  const refChildText = useRef(null);
  useEffect(() => {
    const onSearch = onSearch$.subscribe(( value )=> {
     dispatch({value})
    })
    return () => (onSearch.subscription) onSearch.unsubscribe() 
  }, []);

  const onChangeFilterUsersName = useCallback(() => {
    if (refChildText.current) {
      onSearch$.next(refChildText.current.value);
    }
  }, [refChildText.current]);

  ////
  <Query query={HOGEHOGE} variables={value} >
      <Comp.Provider
        value={{
        onClickPrev,
        onClickNext,
        onChangeFilterUsersName, //pass
        refChildText //pass
}


///////

export const MessagedList = () => {
  const {
    me,
    pageInfo,
    threads,
    totalCount,
    refChildText,
    messagesPerPage,
    onChangeFilterUsersName
  } = useContext(Comp);
return (
    <p><input type='text' placeholder='ユーザー名で絞り込み' ref={refChildText} onChange={onChangeFilterUsersName} /></p>
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment