v0.5.4
v0.5.3
inadvertently introduced a regression in the <A/>
tag that broke [aria-current=page]
. Here's 0.5.4 with a fix!
0.5.3 release notes below:
Along with the usual set of bugfixes and small improvements, there are two noteworthy additions in this release.
Improved rust-analyzer support in #[component]
macro body
Good LSP support for proc macros is hard, because proc macros depend on parsing a stream of input into a valid Rust syntax tree, but while typing you are constantly creating a stream of new, invalid trees. This release tweaks how the #[component]
macro emits code in order to enable better rust-analyzer support within the body of components.
If you've disabled rust-analyzer inside #[component]
for better DX, try toggling that off and see if this is a better experience than it was before!
Apologies for any regressions this causes. Please report any issues that arise.
There is still additional work to be done to support rust-analyzer in the
view!
macro. The hoped-for improvements here are solely inside the#[component]
body.
Optional Context <Provider/>
Component
Since 0.5.0, there've been a couple instances of bugs or confusing behavior related to the fact that context now follows the reactive graph, not the component tree (see #1986, #2038).
This release includes a <Provider/>
component that provides a certain value via context only to its children:
#[component]
pub fn App() -> impl IntoView {
// each Provider will only provide the value to its children
view! {
<Provider value=1u8>
// correctly gets 1 from context
{use_context::<u8>().unwrap_or(0)}
</Provider>
<Provider value=2u8>
// correctly gets 2 from context
{use_context::<u8>().unwrap_or(0)}
</Provider>
// does not find any u8 in context
{use_context::<u8>().unwrap_or(0)}
}
}
provide_context
continues working as it has since 0.5.0, and if you're using it without problems you can ignore this, or use it if you prefer to aesthetics. If you're in a situation where you need to provide multiple context values of the same type and ensure that they are scoped correctly and that siblings do not overwrite one another, use <Provider/>
. If you have no idea what I mean, check the issues above for examples of the bugs this fixes.
What's Changed
- docs: make it easy to see how to run each example in its README by @gbj in #2085
- Fix
aria-current
attribute value by @alexisfontaine in #2089
Full Changelog: v0.5.3...v0.5.4