Refract
  • Read Me
  • Introduction
    • Why Refract?
    • Core Concepts
    • Thinking In Refract
    • Alternatives
  • Usage
    • Getting Started
    • Installation
    • Connecting To React
    • Observing React, Preact and Inferno
    • Injecting Dependencies
    • Observing Redux
    • Observing Anything
    • Handling Effects
    • Pushing to Props
    • Rendering Components
    • Handling Errors
    • Testing
  • Recipes
    • Dependency Injection
    • Creating An API Dependency
    • Handling state
    • Replacing Redux Connect
  • Examples
    • Debounced fetch
    • Counter
    • Field validation
    • Redux fetch
    • Routing
    • Typeahead
    • Visit time
  • API
    • compose
    • withEffects
    • toProps, asProps
    • useRefract
    • refractEnhancer (Redux)
  • Glossary
  • Feedback
Powered by GitBook
On this page
  • Packages
  • Signature
  • Arguments
  • Returns
  • Example
  • Tips
  1. API

useRefract

PrevioustoProps, asPropsNextrefractEnhancer (Redux)

Last updated 6 years ago

Used to create a custom hook.

Packages

useRefract is provided by our React packages - refract-*. It is only available for versions of React supporting hooks (React 16.7.0-alpha.0 and above).

Signature

const useRefract = useRefract(aperture, data, {
    handler,
    errorHandler
})

Arguments

  1. aperture (function): a function which observes data sources within your app, passes this data through any necessary logic flows, and outputs a stream of effect values in response.

    Signature: (component, initialData) => { return effectStream }.

    • The initialData passed to the hook (second argument).

    • The component is an object which lets you observe: see . The observe method allows you to observe data passed to your hook.

    • Within the body of the function, you observe the event source you choose, pipe the events through your stream library of choice, and return a single stream of effects.

  2. data (object): an object of data (state, props, context) passed to your hook.

  3. handler (function): a optional function which causes side-effects in response to effect values.

    Signature: (initialData) => (effect) => { /* handle effect here */ }

    • The initialData passed to the hook (second argument).

    • The effect is each value emitted by your aperture.

    • Within the body of the function, you cause any side-effect you wish.

  4. errorHandler (function): an optional function for catching any unexpected errors thrown within your aperture. Typically used for logging errors.

    Signature: (initialData) => (error) => { /* handle error here */ }

    • The initialData passed to the hook (second argument).

    • The error is each value emitted by your aperture.

    • Within the body of the function, you cause any side-effect you wish.

Returns

componentData (any): Refract hooks have a special built-in effect to push data to your component. Effects emitted by your aperture and wrapped with toRender will be returned by your hook.

import { toRender } from 'refract-rxjs'

Example

import { useRefract } from 'refract-rxjs'

const handler = initialData => effect => {
    switch (effect.type) {
        case 'localstorage':
            localStorage.setItem(effect.name, effect.value)
            return
    }
}

const aperture = (component, initialData) => {
    return component.observe('username').pipe(
        debounceTime(2000),
        map(username => ({
            type: 'localstorage',
            name: 'username',
            value: username
        }))
    )
}

const BaseComponent = () => {
    const [ username, setUsername ] = useState()

    useRefract(aperture, { username }, { handler })

    return <input value={username} onChange={evt => setUsername(evt.target.value)} />
)

Tips

Take a look at our recipe for into your Refract components.

Observing React
dependency injection