Как реализовать что-то вроде счетчика автоинкрементов в Purescript Halogen - PullRequest
0 голосов
/ 09 июня 2019

Учитывая действительно простой компонент приращения в чем-то вроде React:

class Increment extends React.Component {
  constructor(props){
    super(props)
    this.state = {
      value: props.value
    }
  }

  componentDidMount() {
    setInterval(() => {
      this.setState(({ value }) => ({ value: value + 1 }))
    }, 1000);
  }

  render(){
    return (
      <p>{ this.state.value }</p>
    );
  }
}


ReactDOM.render(<Increment value={0} />, document.getElementById('root'))

Как это переводится на галоген Purescript?Просматривая различные вещи в Интернете, я еще не нашел ни одного примера, который мог бы создать собственный прототип.Мне известно о Effect.Time, который выставляет setInterval, но как бы я использовал это, чтобы вызвать что-то, что позволило бы мне обновить состояние (в контролируемом действии, через handleAction).

Япытаясь переместить приложение из Elm и обратно в галоген, и в этом приложении оно использует функцию subscriptions для ключевой функциональности, чтобы обновить состояние приложения, которое не коррелирует с прямым пользовательским вводом.Если у Halogen есть похожая функциональность (я видел subscribe, хотя, похоже, это относится к связи между родительскими / дочерними компонентами, я, возможно, неправильно понял это ...), было бы хорошо, чтобы на нее указывали.

1 Ответ

0 голосов
/ 11 июня 2019

Вот пример counter , написанный на галогене, код: пример purescript-halogen-storybook .

Чтобы сделать его автоматическим приращением, вы можете добавитьфункция самоконтроля в обработчике инициализации.

loop = 
  H.liftAff $ Aff.delay $ Aff.Milliseconds 1000.0
  H.modify_ \s -> s { value = s.value + 1 }
  loop

handleAction Initialize = loop

Проверьте официальный пример lifecycle , чтобы узнать, как использовать initialize.

...