Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat: allow runes in POJO properties#15593

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
Ocean-OS wants to merge11 commits intosveltejs:main
base:main
Choose a base branch
Loading
fromOcean-OS:runes-as-properties

Conversation

Ocean-OS
Copy link
Contributor

@Ocean-OSOcean-OS commentedMar 22, 2025
edited
Loading

This is currently an experiment to see how well runes could work as properties in POJOs. This is similar to#11210, but much more seamless. This would enable explicit fine-grained reactivity in objects, without proxying them. Here's an example:

letcounter={count:$state(0);}

This would get compiled to an IIFE, returning something like this:

letcounter=(()=>{let$$1=$.state(0);return{getcount(){return$.get($$1);},setcount($$value){$.set($$1,$$value,true);}}})();

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC:https://github.com/sveltejs/rfcs
  • Prefix your PR title withfeat:,fix:,chore:, ordocs:.
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.
  • If this PR changes code withinpackages/svelte/src, add a changeset (npx changeset).

Tests and linting

  • Run the tests withpnpm test and lint the project withpnpm lint

Thiagolino8, dannflor, henrykrinkle01, and TheOnlyTails reacted with thumbs up emoji
@svelte-docs-bot
Copy link

@github-actionsGitHub Actions
Copy link
Contributor

Playground

pnpm add https://pkg.pr.new/svelte@15593

@changeset-botchangeset-bot
Copy link

changeset-botbot commentedMar 22, 2025
edited
Loading

🦋 Changeset detected

Latest commit:1b0918c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
svelteMinor

Not sure what this means?Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@Ocean-OS
Copy link
ContributorAuthor

I thinkthis references should be working,try to break them to see if there's any issues.

@Ocean-OS
Copy link
ContributorAuthor

I apparently forgot howthis works in POJOs, so unfortunatelythis doesn't work anymore, you would have to do something likethis instead. It was a nice shortcut, but we probably wouldn't want to confuse people by not following JavaScript's rules.

@notramo
Copy link

If wrapping is needed, then there's asimpler solution using closures, using the currently available Svelte features.

@Tyler-Petrov
Copy link

I have two examples that I would use this in the real world, and would love to see this happen! Thanks for your work on it@Ocean-OS!

Sveltekit-Superforms Scenario

I has creating a wrapper function around thesuperForm() function, so I could return a separate open state along side my form (for forms in collapse and modal components).

functionnewSuperForm(form,formOptions){constnewForm=superForm(form,formOptions)return{        ...newForm,open:$state(false),}}

As this syntax isn't avaliable atm, I'm making due with this.

functionnewSuperForm(form,formOptions){constnewForm=superForm(form,formOptions)return{        ...newForm,getopen(){returnopen},setopen(newOpen){open=newOpen}}}

Passing values as$derived to functions

When passing values to functions its helpful to declare them explicitly as$derived or there was reactivity issues (could definitely be a skill issue though).

constaddressForm=formBuilder(()=>$derived({ ...reactiveAddressObject,_id:databaseId});,addressFormSchema,);

I'm currently using a temp variable for the$derived call atm:

letaddressFormInitialData=$derived({ ...reactiveAddressObject,_id:databaseId});constaddressForm=formBuilder(()=>addressFormInitialData,addressFormSchema,);

Edit: After some digging this example actually doesn't change anything, but the point still stands (even if the code doesn't).

Conclusion

I hope this comment adds constructively to the conversation, and not destructively to the chaos.

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers
No reviews
Assignees
No one assigned
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

4 participants
@Ocean-OS@notramo@Tyler-Petrov@Rich-Harris

[8]ページ先頭

©2009-2025 Movatter.jp