Можно ли считать функциональный компонент чистым, если он имеет внутреннее изменяемое состояние? - PullRequest
0 голосов
/ 12 января 2019

Давайте рассмотрим функциональный компонент, который имеет изменяемое внутреннее состояние:

const FComponent = (options: any)  => {
     let privateID = '0000';

     return {
          ...{ // Public fields
               name: 'component'
          },
          ...{ // Public methods
               setPrivateID: (id: string) => {
                    privateID = id;
               }
          }
     }
};

FComponent({}).setPrivateID('0001');

Стоит ли мне возвращать новый компонент с запрошенным идентификатором?

Как то так? Функтор, я полагаю? https://medium.com/javascript-scene/functors-categories-61e031bac53f

const FComponent = (options: {id: string})  => {
     return {
          ...{
               name: 'component'
          },
          ...{
               privateID: (id: string) => {
                    return FComponent({id})
               }
          }
     }
};

1 Ответ

0 голосов
/ 12 января 2019

Функция, которая мутирует состояние, не является чистой, поскольку мутирующее состояние является побочным эффектом.

Вторая версия не изменяет состояние, но создает новый объект. Вот как работает класс String в Java, который является чисто функциональным.

...