如果功能组件具有内部可变状态,是否可以将其视为纯组件?

时间:2019-01-12 17:23:32

标签: javascript typescript functional-programming components purely-functional

让我们考虑一个具有可变内部状态的功能组件:

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

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

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

我是否应该返回一个具有所请求ID的新组件?

像这样吗?我想一个函子? https://medium.com/javascript-scene/functors-categories-61e031bac53f

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

1 个答案:

答案 0 :(得分:1)

突变状态的功能不是纯粹的,因为突变状态是一种副作用。

第二个版本不改变状态,而是创建一个新对象。这就是Java中的String类的工作方式,它纯粹是功能性的。