스테이트리스 컴포넌트의 컨텍스트
컴포넌트에 다음 코드가 있으며 스테이트리스 컴포넌트가 코드의 이 부분에 액세스 할 수 있도록 하고 싶습니다.
주요 컴포넌트:
function createApp(store, communityIds) {
const App = React.createClass({
childContextTypes: {
localizedString: React.PropTypes.func,
},
getChildContext: function() {
return {
localizedString: function(key, fallback) {
return getKey(key, fallback);
},
};
},
render: function() {
return (
<Provider store={store}>
<Client communityIds={communityIds}/>
</Provider>
);
},
});
return <App/>;
}
스테이트리스:
export default () => (dispatch, getState) => {
const state = getState();
const token = state.user.get('token');
if (!token) {
throw new Error('test'); // this.context.localizedString does not work
}
}
"Stateless:" 함수의 정의에 따라 제공한 것은 상태 비저장 함수가 아닙니다.액션 크리에이터를 덩크로 제공했습니다.대신 클라이언트 컴포넌트의 코드를 삽입하고 싶었을 것입니다.스테이트리스 컴포넌트의 컨텍스트에 액세스하려면 클라이언트컴포넌트는 다음과 같은 처리를 합니다(여기서 설명).
const Client = (props, context) => {
return <div >{context.localizedString("someKey", "someFallback")} </div>
}
Client.contextTypes = {
localizedString: React.PropTypes.func
}
export default Client
저도 같은 질문이 있었어요.현재(2019년)에는 후크 useContext(contextName)를 사용하는 방법이 있습니다.문서: https://reactjs.org/docs/hooks-reference.html#usecontext
const dumbComp = (props) => {
const context = useContext(contextName);
return(
<div>
...
</div>
);
}
상태 비저장 구성 요소의 두 번째 매개 변수 사용
const MyStatelessComponent = (props, context) => {
const onGoButtonClick = () => {
context.router.push('https://www.google.co.in');
};
return(
<div>
<button onClick={() => onButtonClick()}>
{props.buttonName}
</button>
</div>
);
}
MyStatelessComponent.propTypes = {
buttonName: PropTypes.string.isRequired,
};
MyStatelessComponent.contextTypes = {
router: React.PropTypes.object.isRequired,
};
export default MyStatelessComponent;
또 다른 해결책은 자가 호출 함수입니다.
export default (Component=>(
Component.contextTypes = {
localizedString: React.PropTypes.func
}) && Component
)((props, context)=>{
return <div>{context.localizedString("someKey", "someFallback")}</div>
})
또는 contextTypes를 개별적으로 정의하여 재사용하는 경우 다음을 수행할 수 있습니다.
//addContextTypes.js
export default function(Component){
return (Component.contextTypes = {
localizedString: React.PropTypes.func
}) && Component
}
//component.jsx
import addContextTypes from './addContextTypes'
export default addContextTypes((props, context)=>{
return <div>{context.localizedString("someKey", "someFallback")}</div>
})
저도 같은 질문을 했지만, Expo SDK 32에 있었습니다. 즉, 후크에 접근할 수 없습니다.
그 실현 방법은 다음과 같습니다.
import { reduxForm } from 'redux-form'
import { ReduxFormContext } from 'redux-form/lib/ReduxFormContext'
const ShowFormName = () => (
<ReduxFormContext.Consumer>
{
({ form }) => <Text>{form}</Text>
}
</ReduxFormContext.Consumer>
)
export default reduxForm({ form: 'formName' })(ShowFormName)
언급URL : https://stackoverflow.com/questions/35866066/context-in-stateless-component
'programing' 카테고리의 다른 글
Celery: 커스텀 JSON 인코더/디코더를 쓰는 방법이 있습니까? (0) | 2023.03.13 |
---|---|
배열의 일부 속성이 있는 항목 수 가져오기 (0) | 2023.03.13 |
변수를 선언하고 동일한 Oracle SQL 스크립트에서 사용하는 방법은 무엇입니까? (0) | 2023.03.13 |
react JS에서 버튼 누름으로 링크 클릭을 호출하려면 어떻게 해야 합니까? (0) | 2023.03.13 |
WordPress용 html 편집기(TinyMCE)에 P 태그가 표시되지 않음 (0) | 2023.03.13 |