代码之家  ›  专栏  ›  技术社区  ›  Tuomas Toivonen

使用react钩子获取redux存储实例

  •  0
  • Tuomas Toivonen  · 技术社区  · 5 年前

    我需要在react自定义钩子中分派redux操作。如何获取store实例来分派函数内的操作?我猜 useContext 应该可以,但我不知道怎么用。下面是代码示例

    export const useValueInput = (oletusArvo) => {
    
        const [value, asetaValue] = useState(oletusArvo)
        const [store] = useContext(???)
    
        const onChange = ({target}) => {
            asetaValue(target.value)
        }
    
        return [
            value,
            asetaValue,
            {
                value,
                onChange
            }
        ]
    }
    

    在层次结构的上部,我定义了存储提供程序,如下所示

    render() {
        return (
          <div>
            <Provider store={store}>
              <ComponentRouter />
            </Provider>
          </div>
        )
      }
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Teneff    5 年前

    你可以用 react-redux Hooks

    import { useSelector, useDispatch  } from 'react-redux'
    
    export const ComponentRouter = (props) => {
        // get dispatch function for later use
        const dispatch = useDispatch();
        // get value from the store
        const oldValue = useSelector(state => state.prop.innerProp.value);
    
        const onChange = ({target}) => {
            dispatch({
                type: SOMETHING_CHANGED,
                value: target.value,
            });
        }
    
        return <select value={value}>{options.map(....)</select>
    };
    

    PS:然后将组件包装到存储提供程序中