React - Uncaught TypeError: Cannot read property "name' of undefined using Airtable
React - Uncaught TypeError: Cannot read property "name' of undefined using Airtable
我正在 React
中构建一个小型调查组件,用户可以在其中决定是否在不同的选择中投票。通过 Airtable
在名为“调查”的 table 中登记投票
我遇到的问题是我在终端中收到一个名为:TypeError: Cannot read 属性 'name' of undefined`
的错误
这似乎与具有 0 个值的未定义值有关。但是我是 'map()' 那个特定的数组,不明白它是什么未定义的:
survey.js
const Survey = () => {
const [items, setItems] = React.useState([]);
const [loading, setLoading] = useState(true);
const getRecords = async () => {
const records = await base('Survey').select({}).firstPage().catch(err => console.log(err));
// console.log(records);
const newRecords = records.map((record) => {
// lets destructure to get the id and fields
const {id, fields} = record;
return {id, fields};
})
setItems(newRecords);
setLoading(false);
}
useEffect(() => {
getRecords();
console.log(items)
},[])
return (
<Wrapper className="section">
<div className="container">
<Title title="Survey" />
<h3>most important room in the house?</h3>
{loading ? (
<h3>loading...</h3>
) : (
<ul>
{items.length > 0 && items[0].name.first}
{items.map(item => {
console.log(items);
const {
id,
fileds: { name, votes },
} =item;
return (
<li ley={id}>
<div className="key">
{name.toUpperCase().substring(0,2)}
</div>
<div>
<h4>{name}</h4>
<p>{votes} votes</p>
</div>
<button onClick={() => console.log("clicked")}>
<FaVoteYea />
</button>
</li>
)
})}
</ul>)}
</div>
</Wrapper>
)
}
我认为部分问题是由于以下事实造成的,即在 pourposly set as initialization of arrays of object 中,没有给任何值(因为我想初始化它)。
const [items, setItems] = React.useState([]);
最后导致问题的部分如下:
{items.length > 0 && items[0].name.first}
{items.map(item => {
console.log(items);
const {
id,
fileds: { name, votes },
} =item;
到目前为止我学习了this post and 。特别是最后一个似乎很有用,但我仍然不精通Angular
并且还没有完全理解Typescript
,尽管我正在研究它。
然后我也研究了 this post 但仍然找不到我未定义变量的答案。
感谢您指导潜在的解决方案。
在 ES6 中,解构让我们简化代码
如你所见
const {
id,
fileds: { name, votes },
} =item
等同于
item.id // some id
item.fileds.name // some name i
item.fields.votes // some votes
在您的情况下,您破坏了对象项,但文件始终采用经典形式
你的代码应该是
<h4>{fileds.name}</h4>
<p>{fileds.votes} votes</p>
我正在 React
中构建一个小型调查组件,用户可以在其中决定是否在不同的选择中投票。通过 Airtable
我遇到的问题是我在终端中收到一个名为:TypeError: Cannot read 属性 'name' of undefined`
的错误这似乎与具有 0 个值的未定义值有关。但是我是 'map()' 那个特定的数组,不明白它是什么未定义的:
survey.js
const Survey = () => {
const [items, setItems] = React.useState([]);
const [loading, setLoading] = useState(true);
const getRecords = async () => {
const records = await base('Survey').select({}).firstPage().catch(err => console.log(err));
// console.log(records);
const newRecords = records.map((record) => {
// lets destructure to get the id and fields
const {id, fields} = record;
return {id, fields};
})
setItems(newRecords);
setLoading(false);
}
useEffect(() => {
getRecords();
console.log(items)
},[])
return (
<Wrapper className="section">
<div className="container">
<Title title="Survey" />
<h3>most important room in the house?</h3>
{loading ? (
<h3>loading...</h3>
) : (
<ul>
{items.length > 0 && items[0].name.first}
{items.map(item => {
console.log(items);
const {
id,
fileds: { name, votes },
} =item;
return (
<li ley={id}>
<div className="key">
{name.toUpperCase().substring(0,2)}
</div>
<div>
<h4>{name}</h4>
<p>{votes} votes</p>
</div>
<button onClick={() => console.log("clicked")}>
<FaVoteYea />
</button>
</li>
)
})}
</ul>)}
</div>
</Wrapper>
)
}
我认为部分问题是由于以下事实造成的,即在 pourposly set as initialization of arrays of object 中,没有给任何值(因为我想初始化它)。
const [items, setItems] = React.useState([]);
最后导致问题的部分如下:
{items.length > 0 && items[0].name.first}
{items.map(item => {
console.log(items);
const {
id,
fileds: { name, votes },
} =item;
到目前为止我学习了this post and Angular
并且还没有完全理解Typescript
,尽管我正在研究它。
然后我也研究了 this post 但仍然找不到我未定义变量的答案。
感谢您指导潜在的解决方案。
在 ES6 中,解构让我们简化代码
如你所见
const {
id,
fileds: { name, votes },
} =item
等同于
item.id // some id
item.fileds.name // some name i
item.fields.votes // some votes
在您的情况下,您破坏了对象项,但文件始终采用经典形式
你的代码应该是
<h4>{fileds.name}</h4>
<p>{fileds.votes} votes</p>