我该如何解决这个错误 TypeError: Cannot read properties of null (reading 'indexOf') in my redux application

Posted

技术标签:

【中文标题】我该如何解决这个错误 TypeError: Cannot read properties of null (reading \'indexOf\') in my redux application【英文标题】:how can i solve this error TypeError: Cannot read properties of null (reading 'indexOf') in my redux application我该如何解决这个错误 TypeError: Cannot read properties of null (reading 'indexOf') in my redux application 【发布时间】:2022-01-12 20:14:43 【问题描述】:

我正在做一个 redux 项目。 下面是我的appSlice

export const appSlice = createSlice(
  name: "app",
  initialState: 
    channelId: null,
    channelName: null,
  ,
  reducers: 
    setChannelInfo: (state, action) => 
      state.channelId = action.payload.channelId;
      state.channelName = action.payload.channelName;
    ,
  ,
);

这是我的chat.jsx

const [message, setMessage] = useState([]);
  //needed when you want to listen to a statechange in the database and fetch

  useEffect(() => 
    const messageRef = collection(db, "channels", channelId, "messages");
    onSnapshot(messageRef, (snapshot) => 
      setMessage(snapshot.docs.map((doc) => doc.data()));
    );
  , [channelId]);

当我尝试运行我的浏览器时,它给了我这个错误

TypeError: 无法读取 null 的属性(读取 'indexOf')

指向我的 chat.jsx,我有 const messageRef = collection(...)

所以我怀疑在初始渲染时它正在读取空值,因此破坏了我的代码。

我尝试了什么?

当我将 appSlice 中的 const channelId 更改为具有值而不是 null 时,它可以工作。

我只是不希望它有一个初始值,这就是它为 null 的原因,以便当用户现在单击 id 时,它会填充它。

所以我的问题是如何处理此错误而无需更改我的 channelId 的初始状态

【问题讨论】:

【参考方案1】:

我相信您需要加载才能等到数据库调用完成并且您有一个值。因此,我只需将数据库调用移动到它自己的钩子中并返回三个东西data, isLoading, error。然后在你的 chat.jsx 中你可以通过调用钩子来访问数据:

const [yourData, isLoading, error] = useYourCustomHook()

由于加载在那里,您可以在数据库调用运行后返回加载指示器,然后在数据到达后更新useEffect 中的状态。

【讨论】:

以上是关于我该如何解决这个错误 TypeError: Cannot read properties of null (reading 'indexOf') in my redux application的主要内容,如果未能解决你的问题,请参考以下文章

python:TypeError:无法将str写入文本流

成功解决TypeError: only size-1 arrays can be converted to Python scalars

请解决这个 TypeError: can only concatenate str (not "int") to str

当我运行我的 GB 模型时,我得到“TypeError:'CategoricalDtype' 类型的对象没有 len()”,这是啥意思,我该如何解决?

TypeError:“map”类型的对象没有 len() Python3

不能在乘法数组和 e-6 中将序列乘以“float”类型的非整数 [重复]