useless-hook
v1.0.1
Published
Simpler React hooks
Downloads
3
Readme
use-less
Simpler React hooks
Usage:
import { useLess } from '../useLess';
it('works', async () => {
const fn = jest.fn();
const initial = {
name: '',
comp: null as any,
};
const { result } = renderHook(() => useLess(initial));
expect(result.current.state).toBe(initial);
expect(result.current.ref).not.toBe(initial);
expect(result.current.ref).toEqual(initial);
act(() => {
result.current.ref.name = 'updated';
});
expect(result.current.state).toEqual({
name: 'updated',
comp: null,
});
act(() => {
result.current.ref.comp = fn;
});
expect(result.current.state).toEqual({
name: 'updated',
comp: fn,
});
expect(result.current.ref.comp).toBe(fn);
expect(fn).toBeCalledTimes(0);
});
it('should update ref when deps change', () => {
const initial = {
name: 'INITIAL',
comp: null as any,
};
let updateDeps: any;
const { result } = renderHook(() => {
const [deps, _setDeps] = React.useState([0]);
updateDeps = _setDeps;
return useLess(initial, deps);
});
expect(result.current.state).toBe(initial);
expect(result.current.ref).not.toBe(initial);
expect(result.current.ref).toEqual(initial);
initial.name = 'batata';
expect(result.current.ref).toEqual({
name: 'INITIAL',
comp: null,
});
act(() => {
updateDeps([1]);
});
expect(result.current.state).toEqual({
name: 'batata',
comp: null,
});
expect(result.current.ref).toEqual({
name: 'batata',
comp: null,
});
});
it('should setState', () => {
const initial = {
name: 'INITIAL',
comp: null as any,
};
const { result } = renderHook(() => {
return useLess(initial, []);
});
expect(result.current.state).toBe(initial);
const spySetState = jest.spyOn(result.current, 'setState');
act(() => {
result.current.setState({ name: 'changed' });
});
expect(spySetState).toBeCalledTimes(1);
expect(result.current.ref.name).toBe('changed');
expect(result.current.state).toEqual({
comp: null,
name: 'changed',
});
});