jay-js
Version:
Jay is a framework for creating a single page application.
182 lines (127 loc) • 3.62 kB
Markdown
# JAY
<p align="center">
<img src="./assets/images/logo-jay.png" width="250">
</p>
<p>
Jay is a JavaScript framework for creating a single page apps.
The project is in <i>`State`</i> version, feel free to contribute in any way.
</p>
Documentation: [https://linktodocs.com](https://linktodocs.com) 📝
# Install
```cmd
npm install jay-js
```
# Usage
Jay provides you a dynamic <i>`Router`</i>, <i>`UI`</i> components with reactive properties, <i>`State`</i> controller, <i>`Observer`</i> function that trigger a callback everytime that state changes.
#Router
```ts
import { Router } from "jay-js/router";
const renderTarget = document.getElementById("root");
// Home
const Home = () => {
return "Hello World";
}
// Contact
const Contact = () => {
return "Contact-me";
}
Router([
{path: "/", element: Home, target: renderTarget}
{path: "/contact", element: Contact, target: renderTarget}
])
// You can also change the render target.
// It means that is possible to keep some elements
// contents without "re-render" it throught navigation
```
#UI
```ts
import { Button, Section } from "jay-js/ui";
const HelloWorld = () => {
const NavHeader = Section({
className: "my-header-class"
})
const MyButton = Button({
// className: "my-button", // optional, Jay has built-in styles
content: "Click Me!",
click: () => {
alert("Hello from Button");
}
})
NavHeader.append(
"Hello World!",
MyButton
)
return NavHeader;
}
const root = document.getElementById("root");
root.append(HelloWorld())
```
Or -----
```ts
import { Button, Section } from "jay-js/ui";
const HelloWorld = () => {
const MyButton = Button({
// className: "my-button", // optional, Jay has built-in styles
content: "Click Me!",
click: () => {
alert("Hello from Button");
}
})
const NavHeader = Section({
className: "my-header-class",
content: [
"Hello World!",
MyButton
]
})
return NavHeader;
}
const root = document.getElementById("root");
root.append(HelloWorld())
```
#States
States are used to store any type of data on it's first parameter that can be changed with a setter method. States can be tracked by <i>`Observer`</i> method.
```ts
import { State } from "jay-js/hooks"
const App = () => {
const myState = State("Initial value")
console.log(myState.get()) // Returns "Initial value"
myState.set("Second value") // Change state value
console.log(myState.get()) // Returns "Second value"
}
App()
```
#Observer
The observer can be used to render a contente or trigger a function/callback everytime that the <i>`State`</i> changes.
```ts
import { Section } from "jay-js/ui"
import { State, Observer } from "jay-js/hooks"
const App = () => {
const myState = State(0);
const counter = Section({
tag: "h1",
content: `Count: ${myState.get()}`
})
Observer(myState, () => {
counter.set(`Count: ${myState.get()}`)
}, true)
return counter
}
const root = document.getElementById("root");
root.append(App())
```
OR ------
```ts
import { Section } from "jay-js/ui"
import { State, Observer } from "jay-js/hooks"
const App = () => {
const myState = State(0);
const counter = Section({
tag: "h1",
content: Observer(myState, () => `Count: ${myState.get()}`)
})
return counter
}
const root = document.getElementById("root");
root.append(App())
```