重构一个放入组件内部的方法

时间:2018-06-12 14:59:22

标签: reactjs methods ecmascript-6 components refactoring

我的方法目前在我的组件类之外。 我如何重构它,以便它可以放在组件类中?

请忽略其他功能。 我只需要在预期的'中加入重构的myFunction。部分。

你能帮帮我吗?

电流:

const myFunction = (code, data) => (isValid, availableCodes, defaultValue) => {
  if(isValid) {
    const isAvailableCode = isEmpty(availableCodes) || includes(availableCodes, code);
    return isAvailableCode ? get(data, 'originalQty') : defaultValue;
  } 
  return defaultValue;
}

export default class MyComponent extends Component {
  render() {
    const { code , data, minValueAllowed, offersNotAllowed } = this. props;
    const getMinValue = myFunction(code, data);
    const minQty = getMinValue(minValue, offersNotAllowed, 0);
    return (
      <div>
        <Spinner
          minQty={minQty}
          data={data}
        />              
      </div>
   );
  }
}; 

预期:

export default class MyComponent extends Component {

//refactored myFunction here....
  render() {
    const { code , data, minValueAllowed, offersNotAllowed } = this. props;
    const getMinValue = myFunction(code, data);
    const minQty = getMinValue(minValue, offersNotAllowed, 0);

    return ( 
      <div>
        <Spinner
          minQty={minQty}
          data={data}
        />              
      </div>
    );
  }
}; 

1 个答案:

答案 0 :(得分:1)

这应该有效。请注意在渲染方法中将“this”添加到myFunction。

export default class MyComponent extends Component {
  myFunction = (code, data) => (isValid, availableCodes, defaultValue) => {
    if(isValid) {
      const isAvailableCode = isEmpty(availableCodes) || includes(availableCodes, code);
      return isAvailableCode ? get(data, 'originalQty') : defaultValue;
    } 
    return defaultValue;
  };

  render() {
    const { code , data, minValueAllowed, offersNotAllowed } = this. props;
    const getMinValue = this.myFunction(code, data);
    const minQty = getMinValue(minValue, offersNotAllowed, 0);
    return (
      <div>
        <Spinner
          minQty={minQty}
          data={data}
        />              
      </div>
   );
  }
};