Created
September 26, 2019 03:12
-
-
Save rjchatfield/8702351c4033d85ec5b18010cc21b185 to your computer and use it in GitHub Desktop.
ComponentsWithRenderProps
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const ComponentsWithRenderProps = () => ( | |
<ComponentA value={'Value'}> | |
{({ data, doSomethingWithComponentA }) => ( | |
<ComponentB value={'B-value'}> | |
{something => ( | |
<ComponentC | |
data={data} | |
something={something} | |
onAnotherThing={doSomethingWithComponentA} | |
/> | |
)} | |
</ComponentB> | |
)} | |
</ComponentA> | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
func ComponentsWithRenderProps() -> some View { | |
ComponentA(value: "Value") { (data, doSomethingWithComponentA) in | |
ComponentB(value: "B-value") { (something) in | |
ComponentC( | |
data: data, | |
something: something, | |
onAnotherThing: doSomethingWithComponentA | |
) | |
} | |
} | |
} | |
/// No idea about ComponentB or C | |
struct ComponentA<RenderProp: View>: View { | |
@State var value: String | |
let renderProp: (Data, @escaping (String) -> Void) -> RenderProp | |
var body: some View { | |
renderProp(value.data(using: .ascii)!, { self.value = $0 }) | |
} | |
} | |
/// No idea about ComponentA or C | |
struct ComponentB<RenderProp: View>: View { | |
@State var value: String | |
let renderProp: (String) -> RenderProp | |
var body: some View { | |
renderProp(value) | |
.onAppear { self.value = "B didAppear" } | |
.onDisappear { self.value = "B didDiappear" } | |
} | |
} | |
/// No idea about ComponentA or B | |
struct ComponentC: View { | |
let data: Data | |
let something: String | |
let onAnotherThing: (String) -> Void | |
var body: some View { | |
EmptyView() | |
} | |
} | |
let v = ComponentsWithRenderProps().body.body |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment