hyperstack-org / hyperstack-org/hyperstack
Router history#push and #replace should accept optional hash second parameter
- 主要语言
- JavaScript
- 星标
- 538
- 派生
- 41
- PR 合并指标
- 30 天内没有已合并 PR
描述
should be able to do `history.push('/my-page', foo: :manchu)` and have the url be `/my-page?foo=manchu` same with replace
The following patch to Hyperstack::Internal::Router can be added to your hyper_component.rb file:
```ruby
module Hyperstack
module Router
class History
def add_query_params(path, query_params)
return path if query_params.empty?
params = query_params.collect do |k, v|
"#{`encodeURIComponent(#{k})`}=#{`encodeURIComponent(#{v})`}"
end.join('&')
"#{path}#{path =~ /\?/ ? '&' : '?'}#{params}"
end
def push(path, query_params = {})
`#{@native}.push(#{add_query_params(path, query_params)})`
end
def replace(path, query_params = {})
`#{@native}.replace(#{add_query_params(path, query_params)})`
end
end
end
end
module React
class Router
class History
def create_browser_history
Hyperstack::Router::History.new(`#{@native}.createBrowserHistory()`)
end
def create_hash_history
Hyperstack::Router::History.new(`#{@native}.createHashHistory()`)
end
def create_memory_history
Hyperstack::Router::History.new(`#{@native}.createMemoryHistory()`)
end
end
end
end
```
> Note: The second patch to `React::Router::HIstory` makes the push/replace work in the top level router `history` class method as well.
What was happening was create_memory_history was an alias_native of createMemoryHistory. When alias_native is used, the result if not an object that maps directly to ruby will be automatically wrapped in a NativeObject instance. This is also what Hyperstack::Router::History does, but it also adds other methods to the instance.
贡献指南
评估
这个 Issue 还没有评估数据。