如何使用currying有条件地将数据传递到函数中

时间:2017-12-19 19:58:48

标签: javascript typescript functional-programming

我对函数式编程有些新意。这是我目前的React app范例。我有一个通用组件,我正在传递一个函数,可以选择接受placeholder参数。

<TableColumn field="effectiveDate" format={dateFormatter} sortable>Start Date</TableColumn>
<TableColumn field="endDate" format={dateFormatter("No End Date")} sortable>End Date</TableColumn> 

我相信我需要使用currying来实现我的目标(我很快就会谈到)。在这种情况下,我已经定义了dateFormatter这样:

export function dateFormatter(placeholder?: string) {
  return function (date: string) {
    const attributes: any = { value: date };
    if (placeholder) {
      attributes.placeholder = placeholder;
    }
    return <ShortDate {...attributes} />;
  };
}

然后,当我实际渲染我的表时,我遍历每个记录并得到如下值:

getRecordValue(record: any, column: React.ReactElement<TableColumnProps>) {
    const { format, field } = column.props;
    const cell = field ? record[field] : "";
    if (format) {
      return format()(cell, record);
    }
    return cell;
}

我希望有一个dateFormatter函数,但能够选择性地传递placeholder并推迟执行。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

只需使用道具。检查parrent是否通过了某些道具,在你的情况下是format

class App extends React.component{
  render(){
     <CustomComponent  format={dateFormatter("No End Date")}/>
  }
}

class CustomComponent extends React.component{
  constructor(props){
    super(props)
  }

  render(){
     <div>
       Your content maybe
       { this.props.format && this.props.format }
     </div>
  }
}