如何使用 Mobx 设置数据平面列表? [复制]

Posted

技术标签:

【中文标题】如何使用 Mobx 设置数据平面列表? [复制]【英文标题】:How to set data flatlist with Mobx? [duplicate] 【发布时间】:2022-01-02 04:57:33 【问题描述】:

我是 mobx 的新手。我正在尝试使用 mobx 从 favorites store 将数据传输到 FlatListfavoritescreen 端,但是 flatlist 显示为空,为什么?

我在bookmarkList中使用listData()的原因是如果我没有在bookmarkList中使用箭头函数,就会出现如下错误;

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating '_this2.userId')]

收藏夹(商店);

import  observable, computed, action, makeObservable, configure  from "mobx";
import  bookmarkApi, petApi  from '../../constants/apiURL';
import AsyncStorage from '@react-native-async-storage/async-storage';

configure(
    enforceActions: "never",
)

class Favorites 
    userId = 0;
    petList = [];

    constructor() 
        this.bookMarkList()

        makeObservable(this, 
            userId: observable,
            petList: observable,
            bookMarkList: action,
        )
    

    bookMarkList = async () => 
        const value = await AsyncStorage.getItem('userId')
        if (value != null) 

            this.userId = value;

            listData = () => 
                bookmarkApi.get('/').then(function (responseJson) 
                    if (responseJson) 
                        this.petList = responseJson.data.filter(data => data.userId == this.userId)
                    
                )
            
        
    


export const favoriteStore = new Favorites();

FavoriteScreen.js

import  observer  from 'mobx-react';
import  favoriteStore  from '../store/favorites';

function FavoriteScreen() 

    const userId, petList = favoriteStore;

    const Item = ( petName ) => (
        <View style=styles.item>
            <Text style=styles.title>petName</Text>
        </View>
    );


    const renderItem = ( item ) => (
        <Item petName=item.petName />
    );

    return (
        <SafeAreaView style=styles.container>
            <FlatList
                data=petList
                keyExtractor=item => item.bookmarkId
                renderItem=renderItem
            />
        </SafeAreaView>
    )

export default observer(FavoriteScreen);

【问题讨论】:

你昨天刚问了同样的问题,不是吗? ***.com/questions/70074073/… 其实不是。它没有出现错误,但在 flatlist 中仍然没有数据 :) @Danila 好的。现在在您的示例中,您的代码基本上什么都不做。您将一些箭头功能分配给listData,就是这样。你永远不会调用它。这是故意的吗? 是的,因为我不能调用 listdata 函数。因为该函数在 bookMarkList 中。我编写 listData 函数的原因是我需要使用箭头函数,如您在上一个主题中给出的答案。 @丹妮拉 我的请求是将数据从 listData 分配给 FlatList 但不知何故我不能@Danila 【参考方案1】:

我解决了

代替:

listData = () => 
            bookmarkApi.get('/').then(function (responseJson) 
                if (responseJson) 
                    this.petList = responseJson.data.filter(data => data.userId == this.userId)
                
            )
        

像这样:

  bookmarkApi.get('/').then(bookmarks => 
        this.petList = bookmarks.data.filter(data => data.userId == this.userId)
    )

【讨论】:

我的意思是,你刚刚使用了我的解决方案,不是吗? ***.com/questions/70074073/…我会将此问题标记为重复 我就是这样用的 bookmarkApi.get('/').then(bookmarks => this.petList = bookmarks.data.filter(data => data.userId == this.userId) ) 我认为它的解决方案:)

以上是关于如何使用 Mobx 设置数据平面列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我将如何打开一个平面列表? [复制]

如何在.net中更改平面列表框的黑色边框颜色? [复制]

如何处理非规范化数据以传递给平面列表?

每次我的平面列表数据更改时,如何显示活动指示器?

如何为mongodb数据库创建一个平面文件,以及如何在弹性搜索和kibana中使用该平面文件来查询数据?

如何在本机反应中从平面列表中设置 Json 数组