GithubHelp home page GithubHelp logo

ex-navigator's Introduction

ExNavigator

Deprecation Warning There are a few bugs in ex-navigator that require mutation of the state for the state to pass through the Navigator [Issue 110]. It's highly recommended to use the new ex-navigation instead as it's a powered by React Native's "NavigationExperimental". It's recommend to use react-navigation instead.

ExNavigator is a scene navigator that is centered around routes and is built on top of React Native's Navigator. You define ExRoutes, which are plain JavaScript objects with functions to render the scene for the route and the components to display in the nav bar.

The API is in ExRoute.js and ExRouteRenderer.js.

Otherwise ExNavigator is very similar to Navigator.

Why?

This post explains the ideas that are in ExNavigator and how we use it so you can assess whether it is useful for your project, too.

Installation

npm install @expo/react-native-navigator --save

ExNavigator is compatible with React Native 0.16 and newer.

Example projects

Github user Thorenandresen has two very simple bare bones projects showing ExNavigator in use:

Usage

ExNavigator's component API looks very similar to Navigator's. You specify a routeStack and/or initialRoute, along with some styles. ExNavigator will render the navigation bar for you and accepts some props to style its contents. See ExNavigator.propTypes for the list of accepted props.

You must use JavaScript's import keyword to import ExNavigator. Do not use require().

import ExNavigator from '@expo/react-native-navigator';

class Example extends React.Component {
  render() {
    return (
      <ExNavigator
        initialRoute={YourRouter.getHomeRoute()}
        style={{ flex: 1 }}
        sceneStyle={{ paddingTop: 64 }}
      />
    );
  }
}

Routing

The main difference between ExNavigator and Navigator is what the route objects look like. With ExNavigator, you define what each scene looks like, what its navigation bar's contents should be, and what to do when the scene gains or loses focus. A common pattern is to define a router where you create routes:

let YourRouter = {
  getHomeRoute() {
    return {
      // Return a React component class for the scene. It receives a prop
      // called `navigator` that you can use to push on more routes.
      getSceneClass() {
        return require('./HomeScene');
      },

      // When this scene receives focus, you can run some code. We're just
      // proxying the `didfocus` event that Navigator emits, so refer to
      // Navigator's source code for the semantics.
      onDidFocus(event) {
        console.log('Home Scene received focus.');
      },

      // Return a string to display in the title section of the navigation bar.
      // This route's title is displayed next to the back button when you push
      // a new route on top of this one.
      getTitle() {
        return 'Home';
      },
    };
  },


  getProfileRoute(profile) {
    return {
      // You can also render a scene yourself when you need more control over
      // the props of the scene component
      renderScene(navigator) {
        let ProfileScene = require('./ProfileScene');
        return <ProfileScene navigator={navigator} profile={profile} />;
      },

      // There are onWillBlur and onDidBlur events when the scene loses focus.
      // These events occur when another scene will focus or did focus,
      // respectively. The difference between "will" and "did" is the start and
      // end of the scene transition.
      onDidBlur(event) {
        console.log(`Profile Scene for ${profile} lost focus.`);
      },

      // You can render arbitrary views for the title component. Note that you
      // also need to implement getTitle if you want the title of this route to
      // show up in the back button to it.
      renderTitle() {
        return (
          <View style={{ flexDirection: 'row' }}>
            <Image source={profile.photoUrl} style={styles.titlePhoto} />
            <Text style={styles.titleName}>{profile.name}</Text>
          </View>
        );
      },

      getTitle() {
        return profile.name;
      },

      // Render the view to display on the right side of the navigation bar. It
      // is typically a button but doesn't have to be.
      renderRightButton() {
        return (
          <Button onPress={() => { console.log('Tapped right button'); }}>
            Log
          </Button>
        );
      },
    };
  },
};

Navigating

To navigate to a new scene, you use an API very similar to Navigator's. Create a route object—perhaps with the help of your router—and give it to the ExNavigator:

class HomeScene extends React.Component {
  render() {
    return (
      <View style={{ justifyContent: 'center' }}>
        <Button onPress={() => {
          // Get a route object from the router
          let profile = {
            name: 'Alex',
            photoUrl: 'https://images.example.com/alex.jpeg',
          };
          let route = YourRouter.getProfileRoute(profile);

          // `navigator` is passed into your scene component when you have
          // implemented getSceneClass in your route
          this.props.navigator.push(route);
        }}>
          Navigate to a profile
        </Button>
      </View>
    );
  }
}

iOS Scene Transition Shadow

The default scene config, FloatFromRight, has the ability to display a shadow just like it does natively on iOS. However, you need to define your own shadow. Add the following styles in the sceneStyle property on your ExNavigator component:

sceneStyle={{
  overflow: 'visible',
  shadowColor: '#000',
  shadowOpacity: 0.5,
  shadowRadius: 6
}}

Flux-based navigation

You can use the ExNavigator routing framework using Actions to change the route instead of passing around a navigator. react-native-router-flux is built on top of ExNavigator.

ex-navigator's People

Contributors

ahanriat avatar bhullnatik avatar brentvatne avatar cancan101 avatar chirag04 avatar corbt avatar despairblue avatar dsibiski avatar iamulya avatar ide avatar janmonschke avatar jesseruder avatar remstos avatar samuelkraft avatar tomclarkson avatar zebulgar avatar zerob4wl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ex-navigator's Issues

Passing function to routes

When using React I tend to pass functions as props into the children from their parent where they're called.

When I do this through ExNavigator, the function is undefined. E.g.

  render: function() {

    var route = Router.getStartRoute(this.props.handleLogin())

    return (
      <ExNavigator
        showNavigationBar={false}
        initialRoute={route}
        style={{ flex: 1 }}
        sceneStyle={{ paddingTop: 0 }}
      />
    )
  }

How do I call a function from a parent view with ExNavigator? I thought this was an important part of React, with state being kept in the parent as much as possible.

Android/iOS title rendering inconsistent?

screenshot

  getTitle() {
    return 'MENU'
  },
      <ExNavigator
        initialRoute={homeRoute}
        style={{ flex: 1 }}
        titleStyle={{
          fontSize: 20,
          textAlign: 'center',
          margin: 10,
        }}
      />

For iOS title is centred while for Android is left-aligned. Is this a intended behaviour.

React Native 0.16.0 won't work with decorators

RN 0.16.0 comes with Babel 6. So for one thing the syntax of all babel.rc files needs changing (right?) and as mentioned in the 0.16.0-rc release message https://github.com/facebook/react-native/releases/tag/v0.16.0-rc:

Decorators won't work until T2645 lands in Babel.

I tried upgrading my project to the RC and even after changing the syntax of my .babelrc to include

"plugings: ["transform-decorators"]

I still get this error:

simulator screen shot 02 12 2015 10 31 35

Any plans around this for when 0.16.0 stable lands?

Getting onWillFocus() upon tab changes...possible?

My setup is pretty standard - a tab bar with each tab's root being an <ExNavigator>. I update my status bar color accordingly in the onWillFocus() function for each route in my router object. This works great pushing/popping between scenes within each ExNavigator, however when I switch between tabs (to each different ExNavigator component), onWillFocus() is not fired. I realize this isn't really an issue with your library, but I'm wondering if this is possible. I can get the ref of the ExNavigator on tab change no problem, but is there any way I can get the CURRENT route from that, so I can explicitly call onWillFocus() upon tab change?

Accessing this.props.navigator.push from views that are not part of either initialRoute or renderScene.

Hello Exponent Team,

this.props.navigator.push method available to Views that are pushed to ExNavigator or to the views that set via initialRoute.

Can we able to access this.props.navigator.push property, if the view is not either of the above two options. for ex: I have this SideMenu with a Text and onPress of this Text I would like to push the View to ExNavigator. But, this.props.navigator.push method is not available in this context because this scene is not rendered using ExNavigator.
https://github.com/rnagella/ExNavigatorWithSideMenu/blob/master/src/Menu.js#L20

Is there a way to access this.props.navigator.push from non ExNavigator Views?
Thank you for your time.

Here is the sample app that I created to show case my thoughts.
https://github.com/rnagella/ExNavigatorWithSideMenu

Note: Please, swipe Home screen to see the side menu.
home
aboutus
menu
menuerror

Not work or I'm doing wrong?

Well, I follow the readme, but get this error:

undefined is not an object (evaluating \'this._navigator.navigationContext\')'

I'm using RN 0.11.4, with ES6/ES7 features (like the readme say).
Thanks!

Support better workflow for quick action scenerio

I'm using react native quick actions and I'm wondering if there is a better workflow than this. I'm trying to open a route when the user selects a route from a quick action menu. This has been the best I could come up with for replacing and going to a route, if the component has it in the stack, or just pushing it if it doesn't currently exist.

setTimeout(() => this.doQuickAction(QuickActions.popInitialAction()),100)
    this.subscription = React.DeviceEventEmitter.addListener('quickActionShortcut', this.doQuickAction);

....

let routes = this.props.navigator.getCurrentRoutes()

    if(data.userInfo.vaults){

      if(routes.length > 1){
        this.props.navigator.replaceAtIndex(MainRouter.getVaultsRoute({...data.userInfo}), 1)
        this.props.navigator.jumpTo(this.props.navigator.getCurrentRoutes()[1])
      }
      else this.props.navigator.push(MainRouter.getVaultsRoute({...data.userInfo}))
    }
    else if(data.userInfo.receipts){
      if(routes.length > 2){
        this.props.navigator.replaceAtIndex(MainRouter.getReceiptsRoute({...data.userInfo}), 2)
        this.props.navigator.jumpTo(this.props.navigator.getCurrentRoutes()[2])
      }
      else this.props.navigator.push(MainRouter.getReceiptsRoute({...data.userInfo}))
    }

Also, this is inside the initially loaded route, can't seem to find a better place to put this. I spent 30 minutes finding out I have to use a setTimeout or else the currentRoutes aren't set. Feels hacky, but actually works good. Any ideas? I'm sure this is going to be a valid use case for a lot of people in the near future. I thought of doing a pull request for adding replaceAndGoTo but wanted to post here first.

Prevent onRightButtonPress From Being Clicked Repeatedly

Add some mechanism to prevent onRightButtonPress from being clicked Repeatedly. Right now if the action of clicking onRightButtonPressis asynchronous, it may be hit a second time. Resulting in duplicate navigations.

I tried adding state the button allowing only one press but I don't know how to clear this when the back button is pressed returning to the current route.

Ideally after a call to something like navigator.push(route), the button would be disabled.

The way to propagate changes in props with navigator

This might be off the topic but I think many people would consider how to deal with the idea of smart/dumb compoent on react-native, because there are a lot of use cases that the first/initial route, route[0], has information and the rest routes are dumb component. For example, the component of ListView(parent) has the data and the each list item(child component) is just using the part of the parent's data. With React, when there is a change on parent's data, the particular change related to the child component is propagated by using the props.

I'm using "replace" to realize this without propagating props, like below. I would like to know what is the best way to handle this. And is it possible to have the API to deal with this in the future?

  # this is on parent component and the change is pushed to props(I'm using Redux)
  componentWillReceiveProps(nextProps){
    this.props.hubs.map((currentHub) => {
      nextProps.hubs.map((hub) => {
        if(currentHub.updatedAt !== hub.updatedAt){
          this.props.navigator.getCurrentRoutes().map((r, index) => {
            if(r.getHubId && ( r.getHubId() === hub.objectId ) ){
              let route = Router.getHubRoute(hub);
              this.props.navigator.replaceAtIndex(route, index);
            }
          });
        }
      })
    })

Error when trying to use replace on the initalRoute

I tried navigator.replace on the initialRoute got the error below,
ekran resmi 2015-11-18 23 58 24

I managed to go to line 220 on ExRouteRenderer and changed this._previousRoute.scene.componentDidBlur to this._previousRoute.componentDidBlur seems it fixed but it may broke somewhere else.

Here is my ExNavigator component ;
<ExNavigator initialRoute={DaRouter.getHomeRoute()} style={{ flex: 1 }} showNavigationBar={false} />

and navigating block ;
this.props.navigator.replace(DaRouter.getLogin());

Am I missing something here or is it just a bug?

cannot read 'NODE_ENV'

Tried to use ExNavigator like described on the readme and got the exeption in the invaraint-function of browser.js file in line @ 25:0.
It tries to get the environment variable (if (process.env.NODE_ENV !== 'production')) but they are undefined?
I use it with react-native 0.15. Any idea?

Create Example using Code from Blog Post

The blog post does a better job of demonstrating styling aspects of ex-navigator than the examples in the REDAME. I suggest either updating the README or creating a working example using the code in the blog post.

For example:

    renderLeftButton(navigator) {
      return (
        <TouchableOpacity
          touchRetentionOffset={ExNavigator.Styles.barButtonTouchRetentionOffset}
          onPress={() => navigator.parentNavigator.pop()}
          style={ExNavigator.Styles.barLeftButton}>
          <Text style={ExNavigator.Styles.barLeftButtonText}>Done<Text/>
        </TouchableOpacity>
      );

uses a number of styling and offset constants that are not documented in the README.

Root navbar buttons tappable when inside another route

I have a navigator + navbar which displays a button with renderRightButton() (left screen in screenshot). After pushing a new view on the navigator the right button is still tappable (even though it's not visible). When inspecting the navbar I can see the button. It's like the old navbar is positioned beneath the new view and is still tappable. Any idea how to solve this?
artboard

How can I hide the navigation bar?

Thank you so much for creating the ExNavigator.

I am switching from Navigator to ExNavigator in our app in hopes to significantly improve transitions :).
I have a need to hide a Navigation bar on some screens. Could you please add it? Or if it already is in the package please advice on how do I proceed about it?

Export BackIcon

Right now it does not appear possible to import BackIcon.

npm install @exponent/react-native-navigator --save failed

npm ERR! Darwin 14.4.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "@exponent/react-native-navigator" "--save"
npm ERR! node v4.2.1
npm ERR! npm v2.14.7
npm ERR! code E404

npm ERR! 404 Not Found: @exponent/react-native-navigator
npm ERR! 404
npm ERR! 404 '@exponent/react-native-navigator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of 'MyProject'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! Please include the following file with any support request:
npm ERR! /Users/sungongren/Desktop/Henry/study/React-Native/MyProject_0.14.0_mac_react-native.cn/npm-debug.log

Right Padding for Right Button on ExNavigator does not Match Native NavigatorIOS

I am using:

<ExNavigator
    ref="navDevice"
    style={{flex: 1, paddingTop: 65}}
    initialRoute={{
        getTitle() {return 'Devices'; },
        getSceneClass() {return DeviceList; },
        renderRightButton(navigator) {
            return (
              <TouchableOpacity
                touchRetentionOffset={ExNavigator.Styles.barButtonTouchRetentionOffset}
                onPress={() => {that.goToAddDevice();}}
                style={ExNavigator.Styles.barRightButton}>
                <Text style={ExNavigator.Styles.barRightButtonText}>+</Text>
              </TouchableOpacity>
            );
        }
    }}
/>

NavigatorIOS:
image
ExNavigator:
image

Unexpected token

Using react-native-router-flux and getting this error on build

uncaught error Error: SyntaxError: /.../node_modules/@exponent/react-native-navigator/ExNavigator.js: Unexpected token (24:16)
  22 | 
  23 | export default class ExNavigator extends React.Component {
> 24 |   static Styles = ExNavigatorStyles;
     |                 ^
  25 |   static SceneConfigs = ExSceneConfigs;
  26 |   static Icons = ExNavigatorIcons;
  27 | 

Looking for help with documentation

Some more documentation around what props are supported and what they do would be pretty useful along with a short example. The blog post explains why ExNavigator is the way it is but doesn't comprehesively detail all the props. If anyone has suggestions for how to nicely format the docs (w/a preference to legibility more than prettiness) something more than a README would be nice.

LoadingContainer?

@ide You mentioned in your article that you guys have written LoadingContainer to defer screen to load. Has that component released as open source? if so would you please provide me the link?

Thanks,

BTW: ExNavigator is amazing. thanks for the code!

Working together with react-redux

This is more a question than an issue.

I was wondering how I can best connect my router with my Redux store. react-redux's connect method only works with components. Do you usually make your router an component? How do you hook it up to the store and to dispatching actions?

Should `configureScene` be handled by the route instead of the navigator?

I have an app with a tabbar, three tabs, one global navigator and one navigator in each tab. All views pushed onto the global navigator should float from the bottom (they hide the tabbar). All views pushed onto one of the other navigators should float from the right (they don't hide the tabbar, it's still possible to navigate to other tabs without popping the views).

Some views can be pushed to any navigator (like a log-in-view). Now I either need to make two different route factories for the login view or pass in props into the route factory to create a route with the specific scene configuration.

Either way the views that push the log-in-view need to know where they are in the view hierarchy to either choose the correct route factory or to pass the correct scene configuration into the route factory. That seems wrong, as it goes against composition. 😕

Shouldn't only the place of the navigator in the view hierarchy decide about how the next view is shown?

FloatFromBottom with a new Navigation Bar

I am using ExNavigator in my RN app and i want to push a new route with floatFromBottom, but the Navigation Bar is on top of my View and the left button,right button and title cross-fades.

Is there a way to push a new route with floatFromBottom with a new navigation bar that overlays the previous scene?

touchRetentionOffset

What is the touchRetentionOffset property being set on TouchableOpacity ? I don't see that property in the React Native docs.

Add `transitionToTop` and others

Hey, thanks for the module!

Since it's somehow similar to my in-house navigator, I wanted to suggest adding a quite a few custom methods I often find useful so I can switch to this library and keep it maintaining with you :)

First one is transitionToTop (I use transitionTo instead of push hence that name)

function transitionToTop(route) {
    this.navigator.replaceAtIndex(route, 0);
    this.navigator.popToTop();
}

It's quite useful when you want to transition to a new route (push it), but you want to make sure you clear your route stack. This is extremely useful when you have auth flow with multiple routes and on successful login you want to navigate to protected home screen making sure none of auth routes are left in stack (memory management for the win)

Another one is popBack(index) to pop back n times. Say you open help section, then you allow your users to select a subject of a message and then you push a new route with a contact form after subject is selected. On successful form submission, you want to make sure your user goes back to help screen, not to select title of a message one.

function popBack(index) {
    const routes = this.navigator.getCurrentRoutes();
    this.navigator.popToRoute(routes[routes.length - index - 1]);
}

Handling nested navigator navbars correctly

When i push to the screen with own exnavigator, new navbar is fully hidden over old (parent) navbar. When i set sceneStyle.paddingTop, then I will see both navbars correctly, but it is not desired behaviour - i just want to see new navbar, like it is done in iOS Navigator. How to achieve this? Thanks.

Padding Issues

The padding on the top seems to change on subsequent routes:
initial:
image
second:
image

<ExNavigator
    ref="navDevice"
    style={{flex: 1, paddingTop: 65}}
    initialRoute={{
        getTitle() {return 'Devices'; },
        getSceneClass() {return DeviceList; },
        renderRightButton(navigator) {
            return (
              <TouchableOpacity
                touchRetentionOffset={ExNavigator.Styles.barButtonTouchRetentionOffset}
                onPress={() => {that.goToAddDevice();}}
                style={ExNavigator.Styles.barRightButton}>
                <Text style={ExNavigator.Styles.barRightButtonText}>+</Text>
              </TouchableOpacity>
            );
        }
    }}
/>

and then I wire up goToAddDevice to push the same route:

    goToAddDevice(){
        const that = this;
        const nextRoute={
            getTitle() {return 'Devices'; },
            getSceneClass() {return DeviceList; },
            renderRightButton(navigator) {
                return (
                  <TouchableOpacity
                    touchRetentionOffset={ExNavigator.Styles.barButtonTouchRetentionOffset}
                    onPress={() => {that.goToAddDevice();}}
                    style={ExNavigator.Styles.barRightButton}>
                    <Text style={ExNavigator.Styles.barRightButtonText}>+</Text>
                  </TouchableOpacity>
                );
            }
        };
        this.refs.navDevice.push(nextRoute);
    }

@exponent/react-native-navigator is not on npm

When running npm install @exponent/react-native-navigator --save you get '@exponent/react-native-navigator' is not in the npm registry.

Are you maybe using a private registry where this is available? Would be great to have it as an npm package

setState doesn't re-render the component

I have a state property isLoggedIn which stores the state of the logged in user. and componentDidMount checks whether the user is logged in. The problem I'm facing is, If componentDidMount method returns isLoggedIn to true, the Exnavigation doesn't navigate to the home screen. It always returns the login screen regardless

export default class Home extends Component {

  constructor(props) {
    super(props);
    this.state = {
      isLoggedIn: false,
    }
  }

  componentDidMount() {
    AuthService.getAuthInfo((err, authInfo)=> {
      this.setState({
        isLoggedIn: authInfo != null,
      })
    });
  }

  render() {
    let initialRoute = Router.getLoginRoute();
    if (this.state.isLoggedIn) {
      initialRoute = Router.getCategoryListRoute();
    }

    return this.renderScreen(initialRoute);
  }

  renderScreen(route) {
    return (
      <ExNavigator
        initialRoute={route}
        style={{ flex: 1 }}
        sceneStyle={{ paddingTop: 64 }}
        />
    );

  }
}

error when importing

image

I'm getting this whenever I try to import the module. Did I do something incorrectly? I don't feel like there was a lot of steps I could have gone wrong with. I'm using react-native 0.14.2 if that helps.

Warning: Failed propType: Invariant Violation: BackIcon: prop type `sources` is invalid; it must be a function, usually from React.PropTypes. Check the render method of `NavigatorNavigationBar`.

I am seeing this warning:

Warning: Failed propType: Invariant Violation: BackIcon: prop type `sources` is invalid; it must be a function, usually from React.PropTypes. Check the render method of `NavigatorNavigationBar`.

Is this allowed?:

  static propTypes = {
    ...ResponsiveImage.propTypes,
    sources: null,
  };

Issues with ExNavigator Containing ExNavigator

I have an ExNavigator and I push a route that renders a scene with another ExNavigator. Both ExNavigators have showNavigationBar={true}. This is what I see first.
image

When I push Next, I then get the "desired" behavior:
image

DidFocus with nested router?

I have a nested router that goes away on pressing a button. This causes the main router to come back into focus. There doesn't seem to be a hook for this. DidFocus doesn't get called because I guess technically it's still in focus, just behind the current navigator? If I'm wrong let me know. Would love to have a good way to know when a router comes back into focus from something like this.

paddingRight on barBackButton pushes off screen

Was playing around with this and was facing an issue where my back button was getting pushed off screen. I fixed this by changing the barBackButton style to only be 5px of paddingRight:

Before:
screenshot 2015-12-04 17 35 54

After:
screenshot 2015-12-04 17 36 10

Not really sure what the expected behavior should be. Maybe that it changes from "Clipboard" to "Back" when the title of the current screen gets too long. Or gets rid of the text alltogether? Note this is on an iPhone 5 simulator.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.