2017-12-05 20 views
0
에 대한 유형을 정의하는

코드 :방법 소품

let component = ReasonReact.statelessComponent("Page"); 
type matchParams = {. 
    id: int 
}; 
type match = {. 
    params: matchParams 
}; 
type userProps = {. 
    match: match 
}; 
let home = <Home />; 
let user = (~props:userProps) => <User id=props.match.params.id />; 
let make = (_children) => { 
    ...component, 
    render: (_self) => 
    <div> <Route key="home" exact=false path="/home" component=home /> 
    <Route key="user" exact=false path="/user/:id" component=user /> </div> 
}; 

출력 :

약속 레코드 필드 일치 행

let user = (~props:userProps) => <User id=props.match.params.id />; 
유형을 정의하는 방법을

, 내가 뭘 잘못 했니?

답변

1

오류는 예약어로 match이 원인입니다. 당신은 더 나은 오류 메시지를 받았음에 틀림 없어, 나는 이것을 Reason의 버그라고 생각할 것이다. 이를 해결하기 위해 JS 측에서 match으로 컴파일해야한다면 _match을 대신 사용할 수 있습니다. 그렇지 않으면 다른 이름을 사용하십시오.

당신은 (아마도) 몇 가지 다른 문제가 :

  1. let home = <Home />user 같은 함수가 아닙니다. 아마도 let home =() => <Home/>

  2. 함수를 사용하여 레코드 유형을 props으로 정의하고 있습니다. 하지만 레코드 대신 JS 객체가 제공 될 것입니다. 차이점을 설명하는 Reason guide을 참조하십시오.

+0

반응 라우터의 일치 속성은 일치 단어를 사용할 수없는 경우 어떻게 사용합니까? – kirsanv43

+0

위에서 말한 것처럼 '_match'를 사용하십시오. BuckleScript는 생성 된 코드에서 맨 앞의 밑줄을 제거합니다. https://bucklescript.github.io/bucklescript/Manual.html#_object_label_translation_convention를 참조하십시오. – glennsl