Open anharu2394 opened 5 years ago
こうとか(hyperapp風
actions = {
up: -> { |value|
-> |state| {
{ count: state.count + value }
}
}
}
actions = {
up: -> { |value|
action do |state|
{ count: state.count + value }
end
}
}
moduleを使うとか
Module Actions
def up(value)
action do |state|
{ count: state.count + value }
end
end
def set_state(value)
action do # 必ずしもstateを取らなくていい
{ count: value}
end
end
end
action methodでブロック取るにはいい感じなんじゃないかと思ってる。 stateはオプションで取ればいいし。
action do |state|
{ count state.count + value }
end
前のstateが要らないならただhashを返すだけでもいいか。
Moduleの場合は、module methodにしないと、actions.up
のようにできない。それを設定するのはめんどいので、好ましくない。
Classにすればインスタンスを作ると、actions.up
とできるのでClassにしようかな。
Class Actions
def up(value)
action do |state|
{ count: state.count + value }
end
end
end
things action need are previous state(optional), preload(optional), eventObject(optional).
issues
class Actions
def up(value)
action do |state|
{ count: state.count + value }
end
end
end
view = component do |state, actions|
div({}, [
div({}, 'Count:' + state.count.to_s),
input(type: 'button', onclick: actions.up(1), class: 'button', value: 'Set count')
])
end
this example, can pass state and preload, but cannot pass eventObject
so,this like can all elements.
class Actions
def up(value)
action do |state, event|
state.merge({ count: state.count + value })
end
end
end
view = component do |state, actions|
div({}, [
div({}, 'Count:' + state.count.to_s),
input(type: 'button', onclick: actions.up(1), class: 'button', value: 'Set count')
])
end
class Actions
def up(value)
action do |props|
# props == { state:{ ~~~~}, event:{ ~~~}, actions: {~~}}
state.merge({ count: props.state.count + value })
end
end
end
view = component do |state, actions|
div({}, [
div({}, 'Count:' + state.count.to_s),
input(type: 'button', onclick: actions.up(1), class: 'button', value: 'Set count')
])
end
action do |state, event, actions|
end
Actionの仕様が迷う。どうしようか。