StateHub - React JS를 위한 쉬운 컨텍스트 API
18690 단어 reactcontextstatemanagement
createHub
를 사용하여 새 StateHub를 만드는 것으로 시작합니다. 이 StateHub는 구성 요소에 필요한 모든 것입니다. 다른 불필요한 가져오기는 없습니다!import { createHub } from 'statehub';
export const DemoHub = createHub({
state: { title: 'Welcome to StateHub' },
reducer: function (state, action) {
switch (action.type) {
case 'CHANGE_TITLE': {
return {
title: 'This is the changed StateHub title.',
};
}
default:
return state;
}
},
methods: {
LogSomething: function () {
console.log('Hello Statehub');
},
AlertSomething: function () {
alert('StateHub Alert!');
},
},
});
이제 이전에 만든 DemoHub와 함께 제공되는 공급자로 앱을 래핑합니다.
보시다시피 API는 매우 깨끗합니다
import
는 생성된 StateHub이며 그 이상은 아닙니다.import React from 'react';
import { DemoHub } from '../hubs/DemoHub';
export default function Index() {
return (
<DemoHub.Provider>
<App />
</DemoHub.Provider>
);
}
이제 구성 요소에서 상태를 사용할 수 있습니다.
그리고 다시 볼 수 있듯이 필요한 모든 것은 생성된 StateHub에서 가져오고 DemoHub를 제외하고는 다른 가져오기가 필요하지 않습니다.
import React from 'react';
import { DemoHub } from '../hubs/DemoHub';
function App() {
const [state, dispatch, methods] = DemoHub.use(); // call .use() to use the state.
return (
<div>
<h2>{state.title}</h2>
<button onClick={() => dispatch({ type: 'CHANGE_TITLE' })}>
Change Title
</button>
<h2>Method Example 1:</h2>
<button type='button' onClick={methods.LogSomething}>
Log something to the console
</button>
<h2>Method Example 2:</h2>
<button type='button' onClick={methods.AlertSomething}>
Trigger alert
</button>
</div>
);
}
export default App;
state & reducer는 선택 사항입니다. 즉, 메서드만으로 StateHub를 생성하고
YourHub.methods()
를 호출하여 필요한 곳에서 직접 검색할 수 있습니다.import React from 'react';
import { DemoHub } from '../hubs/DemoHub';
function App() {
const { LogSomething, AlertSomething } = DemoHub.methods();
return (
<div>
<h2>Method Example 1:</h2>
<button type='button' onClick={LogSomething}>
Log something to the console
</button>
<h2>Method Example 2:</h2>
<button type='button' onClick={AlertSomething}>
Trigger alert
</button>
</div>
);
}
export default App;
원하는 만큼 StateHub를 사용할 수 있습니다.
import React from 'react';
import App from '../components/App';
import { AuthHub, DatabaseHub, ResponsiveHub, ModalHub } from '../hubs/DemoHub';
export default function Index() {
return (
<AuthHub.Provider>
<DatabaseHub.Provider>
<ResponsiveHub.Provider>
<ModalHub.Provider>
<App />
</ModalHub.Provider>
</ResponsiveHub.Provider>
</DatabaseHub.Provider>
</AuthHub.Provider>
);
}
클래스 구성 요소 지원:
Context가 클래스에서 소비되어야 하는 React < 16.8.0을 지원하려면
컨텍스트 소비자를 위한 render-prop 기반 API:
import React from 'react';
import { DemoHub } from '../hubs/DemoHub';
class App extends React.Component {
render() {
return (
<DemoHub.Consumer>
{(state, dispatch, methods) => (
<div>
<h2>{state.title}</h2>
<button onClick={() => dispatch({ type: 'CHANGE_TITLE' })}>
Change Title
</button>
<h2>Method Example 1:</h2>
<button type='button' onClick={methods.LogSomething}>
Log something to the console
</button>
<h2>Method Example 2:</h2>
<button type='button' onClick={methods.AlertSomething}>
Trigger alert
</button>
</div>
)}
</DemoHub.Consumer>
);
}
}
Reference
이 문제에 관하여(StateHub - React JS를 위한 쉬운 컨텍스트 API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ivanjeremic/statehub-easy-context-api-for-react-js-2jbn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)