aboutsummaryrefslogtreecommitdiff
path: root/src/linked-state.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-08 15:07:07 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-08 15:07:07 +0100
commit6e5fb04d3f3f9a6cd43ac20896d73321dd079f96 (patch)
tree6e9f4002ba1f682eb2dca0c320ab1e9933665a33 /src/linked-state.js
parent30b577138dda685f65a8529be1866afa6e321845 (diff)
Squashed 'thirdparty/preact/' changes from b2d90cc..ba094e2
ba094e2 Run only local tests for pull requests (#390) e9fc3c2 Fix CI build (#386) 70a5ca3 This adds a link to preact-i18nline. (#382) 5dffd85 Merge branch 'pr-fix-build-for-windows' of https://github.com/Download/preact f14edf7 kilobits => kilobytes (#383) c193547 Test for #292 284e4aa 6.4.0 24eab2f Prevent accidental duplicate recycling of elements when swapping the base element of a component. Fixes #373. 76c5ef7 fix lint error 8008886 When swapping the base of a composed child component, update its parent's base reference. Fixes #349. fd4f21f Add an equality check prior to setting `.nodeValue` on text nodes, since Firefox (and maybe others) don't do this internally by default. Fixes #368 - thanks @zbinlin! 1555e2b Add CDNJS version badge in readme (#365) 79c8bae Disable React Developer Tools integration tests under IE (#362) 84f4eeb Refactor `linkState()` a bit to drop around 40 bytes. Coincidentally, that's the exact size of the hooks just added for DevTools... 👌 22bbfcb Little tweaks 👯 f8b326e Document how to use the React DevTools with Preact (#354) 1f4a8eb Correct "preact/devtools" type definitions (#355) 68f22eb Add React Developer Tools integration (#339) 2a7a027 Add ref and allow objects in className (#316) 4a59cca fix readme todomvc link (#345) 37ca4e0 Fixes build for Windows #343 cf93387 6.3.0 ff05818 Make `VNode.children` *always* be an Array, even when there are no children. 9b095f4 Added link to preact-layout (#342) git-subtree-dir: thirdparty/preact git-subtree-split: ba094e27b602cb16aded7dcad95f71e44b7b0476
Diffstat (limited to 'src/linked-state.js')
-rw-r--r--src/linked-state.js24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/linked-state.js b/src/linked-state.js
index ed72bd8bc..b6959df73 100644
--- a/src/linked-state.js
+++ b/src/linked-state.js
@@ -8,21 +8,17 @@ import { isString, delve } from './util';
* @private
*/
export function createLinkedState(component, key, eventPath) {
- let path = key.split('.'),
- p0 = path[0];
+ let path = key.split('.');
return function(e) {
- let t = e && e.currentTarget || this,
- s = component.state,
- obj = s,
- v = isString(eventPath) ? delve(e, eventPath) : t.nodeName ? ((t.nodeName+t.type).match(/^input(che|rad)/i) ? t.checked : t.value) : e,
- i;
- if (path.length>1) {
- for (i=0; i<path.length-1; i++) {
- obj = obj[path[i]] || (obj[path[i]] = {});
- }
- obj[path[i]] = v;
- v = s[p0];
+ let t = e && e.target || this,
+ state = {},
+ obj = state,
+ v = isString(eventPath) ? delve(e, eventPath) : t.nodeName ? (t.type.match(/^che|rad/) ? t.checked : t.value) : e,
+ i = 0;
+ for ( ; i<path.length-1; i++) {
+ obj = obj[path[i]] || (obj[path[i]] = !i && component.state[path[i]] || {});
}
- component.setState({ [p0]: v });
+ obj[path[i]] = v;
+ component.setState(state);
};
}