Я искал другие ответы здесь, но, похоже, никто не объясняет возникшую у меня проблему ...
У меня есть следующий компонент (упрощенный для ясности):
export default function ListAllTeamsData(props) {
// Create intial array
let teamsArray = props.data.teams
// Sort teams
const sortTeams = stableSort(teamsArray)
return (
<React.Fragment>
<Subscription>
{({ data, loading }) => {
teamsArray.push(data.teamCreated)
return null
}}
</Subscription>
<Subscription>
{({ data, loading }) => {
teamsArray.splice(teamsArray.findIndex((e) => e.id === data.teamDeleted.id), 1)
return null
}}
</Subscription>
<ListAllTeamsDataLayout teamList={sortTeams} />
</React.Fragment>
)
}
Как вы можете видеть, компонент ListAllTeamsDataLayout принимает значение prop TeamList, значение которого рассчитывается путем запуска функции в teamArray.
Теперь проблема, с которой я сталкиваюсь, заключается в том, что при обновлении teamArray (через один из компонентов) визуализация ListAllTeamsDataLayout выполняется снова, однако реквизит teamList не изменяется. Я знаю это, потому что у меня есть файл console.log в ListAllTeamsDataLayout, чтобы показать значение props.teamList.
Однако, когда компонент ListAllTeamsDataLayout повторно визуализируется повторно (вызванный чем-то другим, не связанным), на этот раз реквизит teamList был обновлен до правильного значения. Это означает, что для получения правильных данных в компоненте он должен обрабатываться ДВАЖДЫ после изменения реквизита teamList.
Как я могу гарантировать, что всякий раз, когда commandsArray будет вытолкнут или нарезан из одного из компонентов подписки, ListAllTeamsDataLayout снова запустит функцию sortTeams и выполнит повторную визуализацию с новыми значениями?
Если это помогает, компоненты взяты из Apollo GraphQL.