как создать подобный logi c для многопользовательского приложения на react native и Firebase - PullRequest
0 голосов
/ 09 июля 2020

Я работаю над многопользовательским приложением с react-native.

Одной из функций является то, что пользователи могут делиться сообщениями текстовой базы и ставить им лайки, а также иметь проблемы с отображением текущего состояния лайков (сделал ли пользователь понравился этот пост или нет) и подсчитайте их (сколько лайков получит каждый пост).

Моя база данных - firebase realtime database, и я новичок в создании собственной базы данных. Поразмыслив над журналом, я решил хранить свои лайки в виде объекта внутри каждого сообщения, где я бы поместил идентификатор пользователя и истину для представления, что им понравилось, а при втором нажатии просто удалил. Тогда я мог бы легко использовать идентификатор пользователя, чтобы узнать, понравился ли пользователю пост занавеса и сколько ключей имеет сам объект для подсчета лайков.

Итак, в конце концов, я получаю данные как объект сообщения, где у каждого сообщения есть строка идентификатора, текстовая строка для тела сообщения, строка идентификатора пользователя для того, кто им поделился, и объект лайков с идентификаторами пользователей, которым он понравился.

фактические данные о лайках и представление их как понравившихся или нет. Я использую redux и написал промежуточное ПО для получения таких лайков

    export const getAndListenLikes = (postID) => (dispatch, getState) => {
        try {
            const state = getState();
            const feedID = selectActivePosts(state);
            const likesCout = fbApp.db.ref(`posts/${feedID}/${postID}/likes`);
            likesCout.on('value', (snapshot) => {
                if (snapshot.exists()) {
                    const likesCoutObj = snapshot.val();
                    return likesCoutObj 
                }
            });
            return () => likesCout.off();
        } catch (err) {
            console.log('getAndListenLikes', err);
        }
    };

Я использую его для применения middewhre

const store = createStore(rootPersistReducer, composeWithDevTools(applyMiddleware(thunk)));

, и вот мой компонент, где Я пытаюсь использовать его

export const HomeScreenPostLikes = connect(null, {
        toggleLike, getAndListenLikes
    })(({ postID, toggleLike , getAndListenLikes}) => {
        const [ isLiked, setIsLiked ] = useState();
//state shoud represent the currents state of like(liked or not)

    const like = getAndListenLikes(postID)
    console.log('like',like)//gets null for some reason

    const handleLike=()=>{
        setIsLiked((v)=>!v)
        toggleLike(postID)
    }
    return (
        <View style={styles.container}>
            <TouchableOpacity onPress={handleLike}>
                <AntDesign name="heart" size={15} color={isLiked ? COLORS.acsentColor : COLORS.textColorDark} />
            </TouchableOpacity>
            <Text style={styles.count}>{}</Text>
        </View>
    );
});

Я хотел установить объект лайков, а затем установить статус лайков, отфильтровав его с помощью идентификатора пользователя, к которому у меня есть доступ на моем reducer. Однако возврат фактического объекта не работает.

Я не могу использовать redux для сохранения лайков каждого сообщения, потому что тогда я получаю только лайки из последнего опубликованного сообщения. Я попытался написать специальное промежуточное ПО для получения статуса пользователя и установки его значения на начальное значение хука useState. Но это тоже не сработало.

Как лучше вернуть данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...