Skip to content

Commit d4ef71f

Browse files
committed
Documented shared Observed.
1 parent a815a40 commit d4ef71f

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

docs/tutorials/observed_rendering.md

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,36 @@ Nui::Observed<int> number{0};
1212

1313
const auto ui = div{}(
1414
observe(str, number),
15-
// This function is recalled and regenerates its respective elements,
15+
// This function is recalled and regenerates its respective elements,
1616
// when 'str' or 'number' changes.
17-
[&str, &number](){
17+
[&str, &number]() -> Nui::ElementRenderer {
1818
const auto result = *str + std::to_string(*number);
1919
return span{}(result);
2020
}
2121
)
22+
```
23+
24+
## shared_ptr of Observed
25+
26+
Sometimes Observed may expire while the element affected by it is still part of the DOM.
27+
Nui can use weak_ptrs to avoid dangling pointers to expired Observed.
28+
```cpp
29+
#include <nui/frontend.hpp>
30+
31+
/*...*/
32+
33+
std::shared_ptr<Nui::Observed<std::string>> str = std::make_shared<Nui::Observed<std::string>>("test");
34+
35+
const auto ui = div{}(
36+
observe(str),
37+
// This function is recalled and regenerates its respective elements,
38+
// when 'str' changes. Unless str is expired.
39+
[weak = std::weak_ptr{str}]() -> Nui::ElementRenderer {
40+
if (auto str = weak.lock(); str)
41+
{
42+
return span{}(str->value());
43+
}
44+
return Nui::nil();
45+
}
46+
)
2247
```

0 commit comments

Comments
 (0)