ΠΡΠΎΡΡΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΎ ΡΠ°ΠΊΠΈΠ΅ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ, ΠΊΠ°ΠΊ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠΏΡΠΈΠΉ ΠΈ ΡΡΡΠ΅ΠΊ, Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ. ΠΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΠ±ΠΎΡΠ½ΠΈΠΊ ΡΠ°ΡΡΠΊΠ°Π·ΠΎΠ² Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Β«ΠΊΠ°Π½Π°Π» Π°Π΄Π΄ΠΎΠ½ΠΎΠ²Β» Π½ΡΠ»Π΅Π²ΠΎΠΉ.
render.js:65 TypeError: Cannot read property 'removeListener' of null
at WrapStory.componentWillUnmount (WrapStory.js:76)
at ReactCompositeComponent.js:408
at measureLifeCyclePerf (ReactCompositeComponent.js:75)
at ReactCompositeComponentWrapper.unmountComponent (ReactCompositeComponent.js:407)
at Object.unmountComponent (ReactReconciler.js:78)
at Object.unmountChildren (ReactChildReconciler.js:146)
at ReactDOMComponent.unmountChildren (ReactMultiChild.js:371)
at ReactDOMComponent.unmountComponent (ReactDOMComponent.js:990)
at Object.unmountComponent (ReactReconciler.js:78)
at ReactCompositeComponentWrapper.unmountComponent (ReactCompositeComponent.js:417)
ΠΡΠΎ ΡΡΡΠΎΠΊΠ°, ΠΎΡΠ½ΠΎΡΡΡΠ°ΡΡΡ ΠΊ:
this.props.channel.removeListener('addon:knobs:knobChange', this.knobChanged);
Π config.js:
import { configure, addDecorator } from '@storybook/react';
import { withKnobs } from '@storybook/addon-knobs';
import Global from '../src/components/Global';
const req = require.context('../src/components', true, /.stories.js$/);
function loadStories() {
req.keys().forEach(filename => req(filename));
}
addDecorator(story => (
<Global>
{story()}
</Global>
));
addDecorator(withKnobs);
configure(loadStories, module);
Π― ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠ·ΠΎΠ² withKnobs
ΠΊ ΡΠ°ΠΌΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ, Π½ΠΎ Π±Π΅Π· ΡΠ°Π·Π½ΠΈΡΡ. Π― ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π΄ΠΎΠ±Π°Π²ΠΈΡΡ setTimeout ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ withKnobs, ΡΠΎΠΆΠ΅ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
storiesOf('My Story', module)
.addDecorator(withKnobs)
Π‘ΠΎΠ±ΠΈΡΠ°ΡΡΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ 3.0.0, Π³Π΄Π΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, Π½ΠΎ Ρ Π·Π½Π°Ρ, ΡΡΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π² ΡΠ±ΠΎΡΠ½ΠΈΠΊ ΡΠ°ΡΡΠΊΠ°Π·ΠΎΠ² Π±ΡΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
@samkelleher, ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ npm. ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΡΠΈΡΡΠΈΡΡ node_modules
ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ?
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬ : ΡΠ°ΠΊΠΆΠ΅, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΠ°ΠΉΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΡΠΆΠΈ / npm, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ.
ΡΠΏΠ°ΡΠΈΠ±ΠΎ @shilman, Ρ ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Π» ΡΡΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΏΠΈΡΠ°Π»ΠΈ, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΡΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ°ΡΡ. Π£ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ΡΡΡ ΡΠ΅ΡΠΌΠΎΡΡΠ°Π΄ΠΎΡΠ½Π°Ρ ΠΏΠ»Π΅Π½ΠΊΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΌΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π‘ΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π±ΡΠ»Π° Π²Π΅ΡΡΠΈΡ 3.1.6 ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠ±ΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΠ°ΡΡΠΊΠ°Π·ΠΎΠ² Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ ΠΈ Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ! ππ»
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΡΠΏΠ°ΡΠΈΠ±ΠΎ @shilman, Ρ ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Π» ΡΡΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΏΠΈΡΠ°Π»ΠΈ, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΡΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ°ΡΡ. Π£ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ΡΡΡ ΡΠ΅ΡΠΌΠΎΡΡΠ°Π΄ΠΎΡΠ½Π°Ρ ΠΏΠ»Π΅Π½ΠΊΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΌΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π‘ΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π±ΡΠ»Π° Π²Π΅ΡΡΠΈΡ 3.1.6 ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠ±ΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΠ°ΡΡΠΊΠ°Π·ΠΎΠ² Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ ΠΈ Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ! ππ»