Comments (4)
-
Effects in this library are immedately executed so no need to call
tick
. -
Creating a context API would look like this:
import { getContext, setContext } from '@maverick-js/signals';
interface Context<T> {
readonly id: symbol;
readonly defaultValue: T;
}
function createContext<T>(defaultValue?: T): Context<T> {
const id = Symbol();
return {
id,
defaultValue
}
}
function provideContext<T>(context: Context<T>, value?: T) {
setContext(context.id, value ?? context.defaultValue);
}
function useContext<T>(context: Context<T>): T {
return getContext(context.id);
}
Context works within scopes which you can create via createRoot(fn)
. As long as you're executing within a scope then context will work. You can also create a scope yourself scope = createScope()
and then execute a function later by scoped(fn, scope)
.
from signals.
Untrack in this library removes the current scope (i.e., context). The peek
function is what you're looking for.
from signals.
I am trying to implement a context provider around the lines of solid. Question, a renderEffect can be written as follows?
function renderEffect(fn) {
effect(()=>{
fn()
})
tick()
}
Roughly what I have is this:
import { root, getContext, setContext, peek, tick } from "@maverick-js/signals";
function Context(defaultValue = undefined) {
const id = Symbol();
function Context(newValue, fn) {
if (newValue === undefined) {
return getContext(id) ?? defaultValue;
} else {
let res;
effect(() => {
setContext(id, newValue);
peek(() => {
res = fn();
});
});
tick();
return res;
}
}
return Context;
}
function context(defaultValue = undefined) {
const ctx = Context(defaultValue);
ctx.Provider = (props) => ctx(props.value, () => toHTML(props.children));
return ctx;
}
// used in js as
const MyContext = context("test");
MyContext("new value", function () {
const value = MyContext();
console.log("value is", value);
});
// jsx
function Component() {
return (
<MyContext.Provider value="other value">
<Display />
</MyContext.Provider>
);
}
function Display() {
const value = MyContext();
return value;
}
from signals.
@mihar-22 can you please give an example of how you implement a context provider and a renderEffect? Thanks!
from signals.
Related Issues (20)
- Array reconciliation like `mapArray` in Solid.js HOT 1
- No reaction? HOT 14
- What is this. HOT 1
- bench: S.js tests creating 2 computations per node HOT 2
- tick() causes error HOT 2
- Create computeds inside other computeds HOT 5
- Docs for computed options HOT 2
- React integration HOT 1
- bad benchmark in small sample
- effect doesn't work HOT 1
- Signal in effect not triggering unless assigned to a variable HOT 1
- How to untrack a signal change HOT 2
- How to create an observable object/store HOT 6
- selector() missing from readme HOT 1
- Corrupt npm package HOT 1
- Please do not coerce errors HOT 2
- Use object.is for equality check HOT 4
- Error Handling: Why not try parent's handlers before throwing HOT 1
- Reduce bundle size HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from signals.