Rydux – Ein Redux-Speicher für Ihre Ruby-Anwendung

Hallo zusammen, ich wollte diesen Beitrag nur schreiben, um Sie über einen kleinen Rubin-Edelstein zu informieren, den ich geschaffen habe, Rydux. Dieses Juwel ermöglicht es Ihnen, den Zustand von Ihrer Logik in Ihrer Anwendung zu entkoppeln, und implementiert ein funktionaleres Paradigma für die Ruby-Programmierung. Sie können es überprüfen hier.

Um den Edelstein zu verwenden, benötigst du ihn irgendwo im Wurzel Ihrer Anwendung (oder an einem Ort, an dem der Store überall dort verfügbar ist, wo Sie ihn benötigen). Erstellen Sie als Nächstes einige Reduzierstücke in Ihrer Anwendung, Sie können sie überall platzieren, aber a reducers/ Verzeichnis empfohlen. Ein Beispiel-Reduzierer sieht etwa so aus:



class UserReducer < Rydux::Reducer

  
  def self.map_state(action, state = {})
    case action[:type]
    when 'SOME_RANDOM_ACTION' 
      state.merge(some_random_data: true)
    when 'APPEND_PAYLOAD'
      state.merge(action[:payload])
    else
      state
    end
  end

end

Erstellen Sie einen Shop an einem leicht zugänglichen Ort in Ihrer Anwendung:

  require 'reducers/user_reducer'

  
  
  Store = Rydux::Store.new(user: UserReducer)

Etwas im Shop abonnieren:

  class MyClass
    def initialize
      Store.subscribe(self)
    end

    
    
    
    def state_changed(state)
      
    end
  end

Um den Store mit neuen Daten zu aktualisieren, können Sie dispatch Aktionen, etwa so:

  Store.dispatch(type: 'SOME_RANDOM_ACTION')

Alles zusammen:

require 'rydux'

class UserReducer < Rydux::Reducer
  @@initial_state = { name: 'Alex', age: 20 }

  def self.map_state(action, state = @@initial_state)
    case action[:type]
    when 'CHANGE_USER_NAME'
      state.merge(name: action[:payload][:name])
    else
      state
    end
  end

end

Store = Rydux::Store.new(user: UserReducer)

class Friend
  def initialize
    Store.subscribe(self)
    @users_name = Store.state.user.name
  end

  def state_changed(state)
    @users_name = state.user.name
  end

  def greet_user
    puts "Hello, #{@users_name}"
  end
end


friend = Friend.new
friend.greet_user 


Store.dispatch(type: 'CHANGE_USER_NAME', payload: { name: 'Mike' })
friend.greet_user 

Similar Posts

Leave a Reply

Your email address will not be published.