Componentization Architecture v2 - [ReComponents]
A reactive, declarative, lifecycle aware, testable and reusable way of using UI components on Android using Redux.
Fragment is not your view
Installation
dependencies {
// Netflix's ReComponents 0.0.1 Beta
api(name:'recomponents-0.0.1', ext:'aar')
}
Fragment / Activity
private val store = StoreImpl(
reducer = ::appReducer,
initialState = AppState(),
middleware = listOf(::appMiddleware)
)
class YourActivity : AppCompatActivity() {
private val uiComponentManager by lazy {
ViewModelProviders.of(this,
object : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return UIComponentManager(store) as T
}
}
)[UIComponentManager::class.java]
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.linearlayout_main)
initComponents(findViewById(R.id.root))
}
private fun initComponents(container: ViewGroup) {
with(uiComponentManager) {
subscribe(YourComponent(container)) {
YourComponentState(
...
)
}
...
}
}
override fun onDestroy() {
super.onDestroy()
uiComponentManager.store.unsubscribeAll()
}
Component
data class YourComponentState(
...
)
class YourComponent(
container: ViewGroup
) : UIComponent<YourComponentState>() {
override fun render(state: MyComponentState) {}
}
Complete Code Samples
References
Netflix’s Android Componentization Architecture V1 - Droidcon NYC 2018 Talk
Netflix’s Android Componentization Architecture V1 - Droidcon SF 2018 Talk