원시 배열을 소품으로 전달하지만 React/jsx에 의해 키가있는 json 객체로 수정 된 것으로 보입니다 배열 원소에 대응하는 "0", "1"등으로 불린다. 따라서 소품이 실제로 배열인지 아니면 단일 구성 요소인지 알 수 없게됩니다. 예를 들어 반응하지 않는 원시 js 배열을 소품으로 전달하지만 jsx가이를 js 객체로 수정 중
,를 MyComponent을 가지고
propTypes: {
attachedComponents: React.PropTypes.oneOfType([React.PropTypes.array, React.PropTypes.object])
}
인스턴스화를 MyComponent 및 배열에 건네
var foo = <Foo /> // my custom component 1
var bar = <Bar /> // my custom component 2
<MyComponent attachedComponents={[foo, bar]} />
문제,를 MyComponent 내부 this.props.attachedComponents이다 은 실제 JS 배열이 아닙니다. - 키가 "0", "1"인 일종의 JS Object입니다. 각 cor 전달 된 배열 요소에 응답
이 불가능 날에, 프로그램이 전달 된 단일 구성 요소 인 경우 결정, 또는 할 수 nmakes는 실제 배열이라면, 정말 나쁜 해결하는데 투입을하지 않고 :.
를 MyComponent : 이후
getInitialState: function() {
// this cannot work as intended, because the array passed in is converted into a js object whose typeof is object, not array:
if (typeof this.props.attachedComponents !== 'array') {
// do code for single component situation
}
}
내가 전달 하나의 구성 요소에 대해, Object.keys(this.props.attachedComponents).length
확인 할 수는 Object.keys(this.props.attachedComponents)
은 다음과 같습니다
["$$typeof", "type", "key", "ref", "props", "_owner"]
,
이제 구성 요소 배열을 전달하는 이유가 궁금하면 구성 요소를 프로그래밍 방식으로 추가하려고합니다. 나는 this.props.children
을 봐 왔지만,이 신뢰할 수있는 전혀 보이지 않는다 :
페이스 북은
this.props.children
가 불투명 말한다, 당신은 것 같다 게터 있습니다 모두 React.Children API 호출, 암시를 사용해야합니다this.props.children
에는을 돌연변이해서는 안됩니다.
this.props.attachedComponents
이 배열인지 감지하는 방법에 대한 아이디어는 정말 좋지 않은 kludging을하지 않고 배열입니까?
덕분에
감사합니다. 나는 바보 같은 JS 일들에 물렸다, 나는 과거에도이 오류를 만든 것 같아요. 3 ~ 4 개 언어로 전체 스택을 기억할 수 있도록 JS에서 기억해야 할 이상한 몇 가지 단점이 있습니다. Btw, 나는 이것을 의미했습니다. 어린이들은 프로그래밍 방식으로 구성 요소를 추가/제거하기 위해 적절하게 변형 할 수 있다고 확신 할 수 없다는 점에서 신뢰할 수 없습니다. 그래서 저는 수동으로 소품으로 전달하는 배열로 구성 요소를 추가하고 있습니다. 이것은 아마도 다른 질문으로 더 잘 요청 될 것입니다 (!) 감사합니다! – dev