开发者问题收集

为什么我没有通过 redux 获取实际状态?

2020-03-28
63

我获取了填充表单的状态,但这不是实际状态,显然它是初始状态。

import React from "react";
import store from "../store";

const Invoice = () => {
  console.log(store.getState().login);

    return (
    <div className="span7">
      <h4 className="title">
        <span className="text">
          <strong>Datos</strong> de facturación
        </span>
      </h4>
...

但是,我的 redux chrome DevTools 显示的却是实际状态(正确的状态),为什么会有差异? 在此处输入图片说明

在此处输入图片说明

2个回答

确定你的状态的 1 个事实来源 - 如果你认为它应该存在于 redux 中,那么从 redux 中选择状态,并且不要将其与本地 useState 相结合:

import React from "react";
import { useSelector } from "react-redux";

const Invoice = () => {
  const userAuth = useSelector(state => state.login);
  console.log(userAuth);
}
Aprillion
2020-03-28

如果您想记录当前状态(来自 redux),我认为您应该使用 subscription ( store.subscribe(...) ) 并将其放入 useEffect 钩子中。

类似这样的内容:

useEffect(() => {
  const subscription = store.subscribe(() => {
        console.log(store.getState().login);
      });
  return () => { subscription() } // clear out subscription when component unmounts
},[])

您会看到 redux dev tools 和您的 conslole.log 之间的差异,因为使用 store.getState() 时,您会在组件安装时获取状态。使用 subscribe,您会在分派某些操作并更改状态时收到通知。

Danko
2020-03-28