dt2react
descr
ONE DOM helper library for react
Install
npm install dt2react;
Example
const { addClass } = dt2react;
Documnets
align
animation
- cancelAnimationFramePolyfill
- nativeRequestAnimationFrame
- requestAnimationFramePolyfill
- cssAnimation
- throttleAnamition { throttleAnamition, throttleAnamitionDecorator }
class
- addClass
- classList
- classList2
- hasClass
- removeClass
- toggleClass
hasClass(node, className)
addClass(node, className)
removeClass(node, className)
events
on()
off()
onFocus()
position
getOffsetPosition(domEle): { top: number, left: number};
getWindowSize(): { width: number, height: number};
react
Align
childrenToArray
mapSelf
immutableUpdate
Make setState easily and immutably. more info immutability-helper.
- No need to call setState manually
- No need to build syntactic sugar like `{x: {y: {$set: 1}}}`, just pass `x.y` and `1`
import { immutableUpdate as update } from 'dt2react';
class Todos extends Component {
constructor() {
super()
this.update = update.bind(this)
this.state = {
text: '',
items: []
}
}
render() {
const { text, items } = this.state
const update = this.update
return (
<div>
<input type="text" value={text} onChange={e => update('set', 'text', e.target.value)} />
<button onClick={() => update('push', 'items', { text })}>Add</button>
<ul>
{items.map((item, i) => {
return (
<li key={i}>
{item.text}
<button onClick={() => update('splice', 'items', i)}></button>
</li>
)
})}
</ul>
</div>
)
}
}
import { immutableUpdate as update } from 'dt2react';
class App extends Component {
constructor() {
super()
this.update = update.bind(this)
this.state = {
name: 'John',
relation: {
family: 0,
friend: 1
},
honor: ['1', '2', '3']
}
}
someUsage() {
this.update('set', 'name', 'Wall')
this.update('set', 'relation.family', 1)
this.update('set', ['relation', 'family'], 0)
this.update('set', {
name: 'Jamas',
'relation.friend': 0
})
this.update('push', 'honor', '4')
this.update('splice', 'honor', 0)
}
}
which would not execute setState automatically
import { immutableUpdate as update } from 'dt2react';
const myData = { x: { y: 0 } }
const newData = update(myData, 'set', 'x.y', 1)
console.log(newData)
enhancePortal
Portal
reactEvents
wrapper of eventlistener
var addEventListener = require('dt2react/lib/events/eventlistener');
var handler = addEventListener(document.body, 'click', function(e){
console.log(e.target);
console.log(e.nativeEvent);
});
handler.remove();
use. (target: ReactNode, eventType: string, listener: Function): { remove: Function }
import addEventlistener from 'dt2react/lib/react/reactEvents';
getDefaultContainer
create default container
const rootDiv = getDefaultContainer();
PureRenderMixin
import PureRenderMixin from 'dt2react/lib/react/PureRenderMixin';
shouldComponentUpdate(nextProps, nextState) {
return PureRenderMixin.shouldComponentUpdate.call(this, nextProps, nextState);
}
shouldComponentUpdate(...args) {
return PureRenderMixin.shouldComponentUpdate.apply(this, args);
}
PureRenderDeepMixin
deep compare
import PureRenderDeepMixin from 'dt2react/lib/react/PureRenderDeepMixin';
shouldComponentUpdate(nextProps, nextState) {
return PureRenderDeepMixin.shouldComponentUpdate.call(this, nextProps, nextState);
}
shouldComponentUpdate(...args) {
return PureRenderDeepMixin.shouldComponentUpdate.apply(this, args);
}
scroll
calcScrollBarSize(fresh);
getScrollbarWidth();
addPxToStyle(name, value);
domCss: { set, get };
getInnerHeight(el);
getInnerWidth(el);
getScroll(target, top);
prefixStyle(prop);
style
getStyle(node, property)
removeStyle(node, property)
addStyle(node, property, value)
utils
-
warning
-
invariant
-
shallowEqual
-
arrayTreeFilter
-
createChainFunc
-
debounce
-
deprecated
-
devtoolsCheck
import { startCheck } from 'dt2react/lib/utils/devtoolsCheck'; startCheck({ redirect, afterOpen, delay })。可用 window.enableDevtoolCheck 直接进行控制
-
env check is dev: set NODE_ENV=development or NODE_ENV=production
-
stringFormatter
-
toCamelCase
-
trim
-
loadScripts
直接用于react
componentDidMount() {
const script = {
key: 'amapscripts',
url: 'http://webapi.amap.com/maps?v=1.4.3&key=xxx'
};
document.getElementById('app').style.display = 'none';
tools.asyncLoadScript(script, () => {
document.getElementById('app').style.display = 'block';
render(<Container
navs={navs}
defaultNav="amapdemo"
logo="amos amap"
/>, document.getElementById('app'));
});
}
LoadCss.asyncLoadOne({
key: 'amosframework',
url: '/node_modules/amos-framework/dist/amosframework.css'
});
LoadCss.asyncLoadList([
{
key: 'amosframework',
url: '/node_modules/amos-framework/dist/amosframework.css'
}
]);
- get
dt2react/lib/utils/get
import get from 'dt2react/lib/utils/get';
const object = { 'a': [{ 'b': { 'c': 3 } }] };
get(object, 'a[0].b.c');
get(object, ['a', '0', 'b', 'c']);
get(object, 'a.b.c', 'default');
------ utils end
BrowserSupportCore
BrowserSupportCore.hasCSSAnimations();
BrowserSupportCore.hasCSSTransforms();
BrowserSupportCore.hasCSS3DTransforms();
BrowserSupportCore.hasCSSTransitions();
DOMMouseMoveTracker
getVendorPrefixedName
getVendorPrefixedName(property);
Query
canUseDOM
activeElement()
contains(context, node)
getContainer(container, defaultContainer)
getHeight(node, client)
getOffset(node): { top, left, width, height }
getOffsetParent(node)
getPosition(node, offsetParent)
getScrollbarSize(recalc)
getWidth(node, client)
getWindow(node)
isOverflowing(container)
nodeName(node)
ownerDocument(componentOrElement)
ownerWindow(componentOrElement)
scrollLeft(node, val)
scrollTop(node, val)
transition
changelog
v1.1.6
modify LoadScripts, Optimize lib pkg
v1.1.4
add style/clientRect
v1.1.0
add style/lineHeight
License
MIT