我正在进行 API 调用,并成功更新了状态。API 中的数据如下所示:
{
"data": [{"name": string}, {"name":string}, ...]
}
didMount
我正在我的生命周期方法中制作 API 。只是为了测试,我使用onClick
按钮上的 a 记录状态。当我有这样的日志记录语句Js.log(self.state.projects[0);
时,数组中的第一个对象会像这样记录:
{ name: "Flaherty" }
name
然后我像这样登录属性Js.log(self.state.projects[0].name
。我希望"Flaherty"
被记录,但只会undefined
被记录。
我也尝试过name
像这样从状态渲染:<div>(ReasonReact.stringToElement(self.state.projects[0].name)</div>
我得到了这个神秘的错误:Cannot read property '__reactInternalInstance$fljwvs5b8u5' of null。我认为是由于状态不一致。
我可以在反应开发工具中检查状态确实已经更新。我很困惑为什么我无法访问name
. state.projects[0]
请告知是否有人有线索!
我是 ReasonReact 的新手,也许我正在进行 API 调用并以最佳方式更新状态。如果有人对更好的方式有任何建议 - 我欢迎您的反馈。谢谢。
这是我的组件的样子:
type project = {
name: string
};
type state = {
projects: array(project)
};
type action =
| FetchData(array(project))
| Search;
let component = ReasonReact.reducerComponent("Projects");
let make = (_children) => {
...component,
initialState: () => {
projects: [||]
},
reducer: (action, _state) =>
switch(action) {
| FetchData(data) => ReasonReact.Update({projects: data})
| Search => ReasonReact.NoUpdate
},
didMount: (self) => {
Js.Promise.(
Axios.get("/api/projects")
|> then_((response) => resolve(self.send(FetchData(response##data))))
|> ignore
);
ReasonReact.NoUpdate;
},
render: (self) =>
<div>
<div>
<span>(ReasonReact.stringToElement("SEARCH"))</span>
<input _type="text"/>
</div>
<div>
<button onClick=((_) => Js.log(self.state.projects[0].name))>(ReasonReact.stringToElement("log data"))</button>
</div>
<div>
(ReasonReact.arrayToElement(
Array.mapi((i, project) => {
<div key=string_of_int(i) >(ReasonReact.stringToElement(project.name))</div>
}, self.state.projects)
))
</div>
</div>
};