Я следую функциональному шаблону, заданному мастером создания проекта expo, и у меня есть такой компонент:
Search.js
export default function Search() {
const [searchResults, setSearchResults] = React.useState(buildContentViews(contents));
return (
<View style={styles.container}>
<ScrollView contentContainerStyle={styles.contentContainer}>
<View style={styles.statusLine}>
<Text style={styles.statusLineText}>{(pageInfo.numResults || 0) + ' Treffer'}</Text>
</View>
{searchResults}
</ScrollView>
</View>
);
}
Теперь у меня есть нереакционная реализация для REST-сервисов бэкэнда , который должен регулярно обновлять результаты поиска. Поэтому мне нужно сделать что-то вроде:
export default function Search() {
const [searchResults, setSearchResults] = React.useState(buildContentViews(contents));
client.events.on('searchResults', (results) => setSearchResults(results));
return (
<View style={styles.container}>
<ScrollView contentContainerStyle={styles.contentContainer}>
<View style={styles.statusLine}>
<Text style={styles.statusLineText}>{(pageInfo.numResults || 0) + ' Treffer'}</Text>
</View>
{searchResults}
</ScrollView>
</View>
);
}
Однако я быстро получаю сообщение об ошибке, что установлено слишком много прослушивателей событий, что, вероятно, потому, что приведенный выше код запускается каждый раз, когда компонент (повторно) отображается или, другими словами, всякий раз, когда компонент обновляется.
Итак, как мне правильно зарегистрировать прослушиватель событий и / или отменить регистрацию прослушивателя событий в этом сценарии?