hyperstack-org / hyperstack-org/hyperstack

Router history#push and #replace should accept optional hash second parameter

未關閉
#309 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
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 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。