javascript - 无法在 React 中映射数组
问题描述
我通过道具将数组(数据)传递给组件,但是我无法映射数据。
const Component1 = ({ data }) => {
console.log(data);
const renderData = () =>
data.map(singleItem => (
<OtherComponent key={singleItem ._id} singleItem ={singleItem} />
));
return (
<Row className="row--small-padding">{renderData()}</Row>
);
console.log(data)
按预期返回对象数组,但是,数据没有传递给另一个组件。我假设在获取数据之前正在渲染?
我的数据获取函数如下所示:
const fetchAllData = async () => {
const response = await getData();
const data = await response;
setData(data);
};
useEffect(() => {
fetchAllData();
}, []);
我已经通过data &&
在 map 函数之前添加来解决这个问题,但是数据正在通过许多组件传递,我想知道是否还有其他解决方案?如何设置我的组件以等待获取数据然后渲染?
编辑:数据数组初始状态设置为空,像这样:
const Component= () => {
const [data, setData] = useState(null);
const fetchAllData = async () => {
const response = await getData();
const data = await response;
setSources(data);
};
useEffect(() => {
fetchAllData();
}, []);
return (
<>
<Component1 limit={4} data={data} />
<Component2 limit={4} data={data} />
<Component3 limit={4} data={data} />
</>
);
};
export default Component
解决方案
您必须将该renderData
方法放在功能的返回中Component
。
推荐阅读
- spring - 我只能通过@ComponentScan 获得另一个@Configuration
- react-native - React-Native 异步函数意外标识符 _this2
- javascript - 正则表达式 if else 语句失败
- angular - candeactivate 与子路由不工作
- python - xml用python打印元素值
- amazon-web-services - aws lightsail 连接被拒绝(在腻子中)
- javascript - 如何从struts2 Action中的multiply radio接收值
- nexmo - Nexmo:将 2 个呼叫转发到 nexmo 中的同一个 LVN
- php - PHP中未定义的索引图像,我知道这是重复但我尝试了很多解决方案但没有一个有效
- c# - 用于对集合列表进行排序的 Lambda 表达式