나는 React를위한 사용자 정의 "튜플"prop-type을 만들려고 노력하고 있지만, 나는 약간의 장애물에 부딪쳤다.터플 소품 유형 검사기를 만드는 방법은 무엇입니까?
API는 다음과 같을 것이다 :
import {PropTypes} from 'react';
export default class MyComponent extends React.Component {
static propTypes = {
myProp: tuple(PropTypes.number, PropTypes.string),
};
이 myProp
첫번째 요소가 다수 존재하여, 2 소자 어레이인지 확인 것이고, 두 번째는 문자열 인.
여기에 내가 가진 얼마나 멀리입니다 :
export function tuple(...arrayOfTypeCheckers) {
return requirable(function(props, propName, componentName) {
let value = props[propName];
if(!Array.isArray(value)) {
throw new Error(`Expected array for \`${propName}\` in \`${componentName}\``);
}
if(value.length !== arrayOfTypeCheckers.length) {
throw new Error(`\`${propName}\` must have exactly ${arrayOfTypeCheckers.length} elements in \`${componentName}\`, got ${value.length}`);
}
for(let i = 0; i < value.length; ++i) {
let checker = arrayOfTypeCheckers[i];
if(!__NEED_HELP_HERE__) {
throw new Error(`${propName}[${i}] is not of the expected type in \`${componentName}\``)
}
}
return null;
});
}
(requirable
의 구현이 here을 찾을 수 있습니다)
을 그러나, 나는 __NEED_HELP_HERE__
을 구현하는 방법을 알아낼 수 없습니다. PropTypes.string
는
function(props, propName, componentName)
당신은 소품의 전체 객체 플러스 PROPNAME 소요 알 수 있습니다, 서명과 다른 소품 형이다. 값은 다음과 같이 액세스됩니다.
var propValue = props[propName];
즉, 배열에서 고유 한 값을 제공 할 수 없습니다.
어떻게하면 React의 PropTypes.xyz
검사기를 호출 할 수 있습니까?
이 코드를'npm'을 통해 가져올 수있는 프로젝트로 게시 했습니까? – codermonkeyfuel
@codermonkeyfuel 아니요, 죄송합니다. 이 함수들은 내가 게시하기 전에 좀 더 세련된 것이 필요하다. 아마 lodash에 대한 종속성을 제거 할 것이다. – mpen