Как описать в потоке удаление реквизита в реакции HOC

Вы можете сделать это следующим образом:

var all = new [] {
    new Cls(1, 9)
,   new Cls(2, 9)
,   new Cls(3, 15)
,   new Cls(4, 15)
,   new Cls(5, 15)
,   new Cls(6, 30)
,   new Cls(7, 9)
};
var f = all.First();
var res = all.Skip(1).Aggregate(
    new List<Run> {new Run {From = f.SequenceNumber, To = f.SequenceNumber, Value = f.Value} }
,   (p, v) => {
    if (v.Value == p.Last().Value) {
        p.Last().To = v.SequenceNumber;
    } else {
        p.Add(new Run {From = v.SequenceNumber, To = v.SequenceNumber, Value = v.Value});
    }
    return p;
});
foreach (var r in res) {
    Console.WriteLine("{0} - {1} : {2}", r.From, r.To, r.Value);
}

Идея состоит в том, чтобы творчески использовать Aggregate: начиная со списка, состоящего из одного Run, проверьте содержимое списка, до сих пор на каждом этапе агрегации (утверждение if в лямбда). В зависимости от последнего значения, продолжайте старый запуск или запустите новый.

Вот демон g0 на ideone .

1
задан Alex 17 January 2019 в 19:37
поделиться

1 ответ

Вам необходимо использовать: Generics , $ Diff и Hoc Definition :

import * as React from 'react';

type TComponent = {
  pass: string,
  inject: string
}
const TestComponent = ({pass, inject}: TComponent) => <span>{pass}{inject}</span>

type THocDiff = {
  take: string
}

type TInjectInHoc = {
  inject: string
};

const Hoc = <T: {}>(Component: React.AbstractComponent<T>): React.AbstractComponent<$Diff<T, TInjectInHoc> & THocDiff> => {
  return class extends React.Component<T & THocDiff> {

  render(){
    const { take, ...props} = this.props;
    return(
        <Component {...props} inject="inject" />
    )
  }
 }
}
const WrappedComponent = Hoc<TComponent>(TestComponent)

const using = () => (<WrappedComponent pass="123" take='take' />)

Try

0
ответ дан Alex 17 January 2019 в 19:37
поделиться