All Projects → pressly → Scene Router

pressly / Scene Router

Licence: mit
A complete scene routing library for react native

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Scene Router

Fastroute
Simple, idiomatic and fast 161 loc http router for golang
Stars: ✭ 128 (-14.09%)
Mutual labels:  router
Decouplingkit
decoupling between modules in your iOS Project. iOS模块化过程中模块间解耦方案
Stars: ✭ 136 (-8.72%)
Mutual labels:  router
Pimd
PIM-SM/SSM multicast routing for UNIX
Stars: ✭ 143 (-4.03%)
Mutual labels:  router
Laravel Router
An organized approach to handling routes in Laravel.
Stars: ✭ 130 (-12.75%)
Mutual labels:  router
Router5
Flexible and powerful universal routing solution
Stars: ✭ 1,704 (+1043.62%)
Mutual labels:  router
Grip
The microframework for writing powerful web applications.
Stars: ✭ 137 (-8.05%)
Mutual labels:  router
Bsdrp
BSD Router Project
Stars: ✭ 126 (-15.44%)
Mutual labels:  router
Vue Stack Router
Vue Stack Router
Stars: ✭ 146 (-2.01%)
Mutual labels:  router
Http
An opinionated framework for scalable web 🌎
Stars: ✭ 136 (-8.72%)
Mutual labels:  router
Dowse
The Awareness Hub for the Internet of Things
Stars: ✭ 139 (-6.71%)
Mutual labels:  router
Linux Router
Set Linux as router in one command. Support Internet sharing, redsocks, Wifi hotspot, IPv6. Can also be used for routing VM/containers
Stars: ✭ 129 (-13.42%)
Mutual labels:  router
React Resource Router
Configuration driven routing solution for React SPAs that manages route matching, data fetching and progressive rendering
Stars: ✭ 136 (-8.72%)
Mutual labels:  router
Foxify
The fast, easy to use & typescript ready web framework for Node.js
Stars: ✭ 138 (-7.38%)
Mutual labels:  router
Luthier Ci
Improved routing, middleware support, authentication tools and more for CodeIgniter 3 framework
Stars: ✭ 129 (-13.42%)
Mutual labels:  router
Yrv
Your routing! (for Svelte)
Stars: ✭ 143 (-4.03%)
Mutual labels:  router
React Redux Graphql Apollo Bootstrap Webpack Starter
react js + redux + graphQL + Apollo + react router + hot reload + devTools + bootstrap + webpack starter
Stars: ✭ 127 (-14.77%)
Mutual labels:  router
Esp slip router
A SLIP to WiFi router
Stars: ✭ 135 (-9.4%)
Mutual labels:  router
Router
Router —— A substitute good of EventBus similar implemented by dynamic proxy
Stars: ✭ 147 (-1.34%)
Mutual labels:  router
Nextjs Dynamic Routes
[Deprecated] Super simple way to create dynamic routes with Next.js
Stars: ✭ 145 (-2.68%)
Mutual labels:  router
Pure Http
✨ The simple web framework for Node.js with zero dependencies.
Stars: ✭ 139 (-6.71%)
Mutual labels:  router

scene-Router (v2)

A complete scene routing library written in pure JavaScript for React Native. It supports iOS and Android. The api is so easy that you just have to learn only 2 simple things, scene decorator and Router component.

Description

We, at Pressly, using react-native and our app consists of large number of scenes. We wanted somthing super simple, it went through a lot of internal reversion, until we decided to open source it.

scene-router supports the following out of box:

  • url like path, which can contains params and query strings. e.g. '/user/:id'
  • passing custom props to target scene
  • storeless, you can connect to redux or mobx stores
  • reset stack of scenes
  • animating scene from all 4 direction
  • gesture enable
  • configure scene settings at scene difinition and route time
  • all animation are being configure to optimize useNativeDriver feature

Installation

npm install scene-router

Prerequisite

we recommended to use decorator. It makes the code a lot easier to maintain. If you don't want to use it, that's ok too.

in order to enable decorator in your react-native project follow the 3 steps below,

1: install babel-plugin-transform-decorators-legacy using yarn or npm and 2: configure your .babelrc file as follows

{
  "extends": "react-native/packager/react-packager/rn-babelrc.json",
  "plugins": ["transform-decorators-legacy"]
}

3: if you are using flowtype, make sure to add esproposal.decorators=ignore under [options] tags inside .flowconfig file

Usage

There are 2 things you should learn about scene-router in oreder to start using it in your project

scene decorator

scene is a decorator feature which register your component as a scene. here's an example

import React, { Component } from 'react'
import { scene } from 'scene-router'

@scene({
  path: '/scene1'
})
class MyFirstScene extends Component {
  render() {
    ...
  }
}

a little bit of explaination, what we did was adding scene as a decorator on top of our first component MyFirstScene. We were passing path. This is our path to this scene. so every time, Router wants to render this scene, all it needs a path url. scene-router will handle all coordinations and animations behind the scene.

you might ask, so what if I want to show my scene from top to bottom. As I said, scene decorator accepts many arguments. except path the rest of the arguments are optional. here's the list of all options

option type required default value route time change Description
path String Yes N/A No register a scene with this unique path
side Side No Side.FromRight Yes how the scene will animated, from which side
threshold Number No 30 Yes how far from side you have to swip to make the gesture working
gesture Boolean No true Yes enable or disable gesture
reset Boolean No false Yes all scenes prior to this scene will be destroyed
backgroundColor String No white Yes the back color of each scene

ther are 5 differant sides you can choose from

name description
FromLeft Animate the Scene From Left to Right
FromRight Animate the Scene From Right to Left
FromTop Animate the Scene From Top to Bottom
FromBottom Animate the Scene From Bottom to Top
Static No animation

There is one little thing, every component which decorated with scene will have a method called, updateSceneStatus(status: Status). This method will be called based on whether your scene is Active, InActive, MightActive or MightInActive. In other words, We are adding 4 more lifecycles to React. remember this is just a utility to help you!

import React, { Component } from 'react'
import { scene, Status } from 'scene-router'

@scene({
  path: '/scene1'
})
class MyFirstScene extends Component {
  updateSceneStatus(status) {
    switch(status) {
      case Status.Active:
        break
      case Status.InActive:
        break
      case Status.MightActive:
        break
      case Status.MightInActive:
        break
    }
  }

  render() {
    ...
  }
}

here's a little bit of description:

value Description
Active when the animation is done and scene is visible
InActive when a scene is already covered or gone
MightInActive during dragging a scene. the current scene will get this value
MightActive the previous and covered scene by current during dragging with get this value

Router component

the second thing to learn is Router. This is your entry point of your app. It has only 3 props, area, action and config.

  • area is a string which defines an area with a name. if you plan to use tabs, each individual tab must have a unique name, that name can be passed to area
  • action is a string which accepts either goto or goback. if you pass goback, the 3rd prop, config, will be ignored.
  • config is defining which path you want to go and if you want to override any scene configuration.

here's an example of Router

import React, { Component } from 'react'
import { View, Text } from 'react-native'
import { scene, Router } from 'scene-router'

@scene({
  path: '/scenes/:id'
})
class Scenes extends Component {
  render() {
    const { route: { params } } = this.props

    return (
      <View style={{ flex: 1}}>
        <Text>{params.id}</Text>
      </View>
    )
  }
}

class App extends Component {
  constructor(props: any, context: any) {
    super(props, context)

    this.state = {
      area: "default",
      action: 'goto',
      config: {
        path: '/scenes/1'
      }
    }
  }

  render() {
    const { area, action, config } = this.state

    return (
      <Router
        area={area}
        action={action}
        config={config} />
    )
  }
}

NOTE Router component also accepts one Componet as a child, This Component is being displayed and renderd first before the first route is triggered. this is a good place to put your splash screen.

Cheers.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].