#javascript #reactjs #react-native #fetch #real-time
#javascript #reactjs #react-native #выборка #в режиме реального времени
Вопрос:
Привет, в моем проекте есть раздел комментариев к видео.Итак, чего я ожидаю, так это отображения комментариев сразу после публикации пользователем.Я пробовал componentWillUpdate()
метод.Но это каждый раз перерисовывает пользовательский интерфейс, поэтому вызывает некоторую тряску в пользовательском интерфейсе.Также я пытался вызвать fetch
метод в рамках обещания postComment
.Это означает, что в процессе выборки при публикации комментария я пытаюсь вызвать следующую выборку для отображения отправленных комментариев.Но бесполезно.Ниже приведен код, который я пробовал
код
postComment(){
fetch(GLOBAL.COMMENT `${this.props.id}/new/0`, {
method: 'POST',
headers: {
'Authorization': token,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
comment_content: this.state.text
})
})
.then((response) => response.json())
.then((responseData) => {
this.setState({
text: '',
isLoad: false
})
}).then(() => {
fetch(GLOBAL.GET_COMMENT `${this.state.unit_id}/`, {
method: 'GET',
headers: {
'Authorization': token
}
}).then((response) => response.json())
.then((responseData) => {
this.setState({
comment: responseData.data,
tab2: true,
tab3: false,
isLoading: false
})
});
})
}
Есть ли какое-либо решение для этого? Пожалуйста, помогите.Приветствуется любая помощь.Спасибо!
Комментарии:
1. Что вам нужно сделать, это изменить состояние после добавления комментария, чтобы он автоматически перезапускался и отображал все комментарии, как только они были добавлены. Итак, если комментарии находятся на серверной части, после завершения запроса вызовите функцию, которая возвращает все комментарии и состояние обновления.
2. Вы можете добавить новый опубликованный комментарий в свой flatlist
data
без выборки. Повторную выборку выполнять не нужно3. @squeekyDave Итак, какие изменения мне нужно внести в мой существующий код? Пожалуйста, помогите.
4. @anu Итак, я предполагаю, что ваши комментарии к серверной части хранятся в базе данных? Если это так, то после завершения запроса post comment вызовите функцию, которая извлечет все комментарии и установит состояние для вновь выбранных комментариев, которые выполнят повторный рендеринг, и вы увидите новые комментарии, как только они будут опубликованы.
5. @squeekyDave Итак, вместо этой выборки в promise я должен сделать что-то вроде этого
((then) => getComments() )
Я прав?
Ответ №1:
Итак, это будет выглядеть примерно так, я не уверен, как настроен остальной ваш код, поэтому отнеситесь к этому с долей скептицизма.
getComments() {
fetch(GLOBAL.GET_COMMENT `${this.state.unit_id}/`, {
method: 'GET',
headers: {
'Authorization': token
}
})
.then((response) => response.json())
.then((responseData) => {
this.setState({
comment: responseData.data,
tab2: true,
tab3: false,
isLoading: false
})
});
})
};
postComment() {
fetch(GLOBAL.COMMENT `${this.props.id}/new/0`, {
method: 'POST',
headers: {
'Authorization': token,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
comment_content: this.state.text
})
})
.then((response) => response.json())
.then((responseData) => {
this.getComments();
})
}