2017-12-28 11 views
1

FloatingButton으로 확인란 동작을 시뮬레이트해야합니다. 버튼은 처음에 secondary 속성을 true로 설정하여로드합니다.클릭시 ReactJS MaterialUI FloatingButton의 속성 토글

클릭하면
<FloatingActionButton secondary={true} mini> 
    T 
</FloatingActionButton> 

, 그것은이 같이 false로 보조 속성 값을 전환 : 지금처럼 여기

<FloatingActionButton secondary={false} mini> 
    T 
</FloatingActionButton> 

여기 enter image description here

활성화되고 M과의 최종 결과는 무엇입니다 나는하려고 노력했다. 그러나 물론, 그것은 일하지 않고있다, 롤

당신이 나의 것보다 더 간단한, 최소한의 방법을 가지고 있다면, 나는 그것을 위해 또한 모두 다하고 있습니다. 미리 감사드립니다.

+0

는'secondary' 소품 부울 기대 조건을 다음과 같이 요소를 렌더링 활성 일

constructor(){ this.state = { // initially blank, so no days are active activeDayIds: [], } } 

을 추적합니다 constructor의 배열을 초기화하고 당신은 문자열을 그것에 전달하고 있습니다. 따옴표를 제거하십시오 this.state.activeDayId === 1? true : false' –

+0

@Prakashsharma 굉장한 잡기! 그러나 한 번만 전환됩니다. 스왑 대신 토글해야합니다. 또한 나는 문자열 인용문을 꺼내 불필요한 삼항에 대한 오류를 던졌습니다 – LOTUSMS

답변

1

버튼을 토글하고 싶다면 id가 이미 설정되어 있는지 확인하는 조건을 메소드에 넣으십시오 그런 다음 여러 날짜를 추적하려면

은 당신이 : 그것은

setActiveDay(id) { 
     if (id === this.state.activeDayId) { 
      // id is already selected and user has clicked on it again so reset it by assigning "null" to it 
      this.setState({activeDayId: null}); 
     } 
     else { 
      this.setState({activeDayId: id}); 
     } 
    } 

또한이

<FloatingActionButton 
    secondary={this.state.activeDayId === 1} 
    mini 
    onClick={() => this.setActiveDay(1)}> 
     S 
</FloatingActionButton> 

업데이트 같은 삼항 연산자를 사용하지 않고 secondary 소품에 부울을 전달할 수 있습니다 리셋 배열을 가져 가야합니다. 다음이

setActiveDay(id) { 
     let activeDayIds = [...this.state.activeDayIds]; 
     if (this.state.activeDayIds.includes(id)) { 
      // id is already in the array which means it is selected and user has clicked on it again so remove it from array 
      activeDayIds.splice(activeDayIds.indexOf(id), 1); 
     } 
     else { 
      // this id is not in the array yet which means user has activated this so include this in array 
      activeDayIds.push(id) 
     } 
     // set back the state 
     this.setState({activeDayIds: activeDayIds}); 
    } 

setActiveDay을 변경 한 다음

<FloatingActionButton 
     secondary={this.state.activeDayIds.includes(1)} 
     mini 
     onClick={() => this.setActiveDay(1)}> 
      S 
    </FloatingActionButton> 
+0

이것은 토글을 해결했다. 하지만 지금은 하나만 유지할 수 있습니다. 다른 토글 버튼을 누르면 토글 상태가 다른 토글 상태로 바뀝니다. 어쩌면 나는이 모든 것을 처음부터 잘못 생각했을 것이다. 사용자는 자신이 선택한 날짜를 하루 동안 또는 그 날부터 선택해야합니다. 아이디어를 얻으려면 며칠이 걸릴지 선택하는 선수입니다. 모두 일 수도 있고 하루 일 수도, 3 일 수도 있습니다. 코드가 혼란 스러울 경우 사과드립니다. – LOTUSMS

+0

더 간단하게 처리 할 수 ​​있습니까? ID 대신에 ID에 관계없이 클릭시 상태를 전환 할 수 있습니까? 7 번 반복하는 것을 피하려고했기 때문에 신분증을 가지고갔습니다. 매일 독립적으로 작동해야합니다. – LOTUSMS

+0

@LOTUSMS 업데이트 된 답변 확인 –

1

truefalse 값이 따옴표로 묶인 경우 항상 true 값이됩니다.

당신은 당신의 secondary 소품에 {this.state.activeDayId === 1 ? "true" : "false"} , 그것은 항상 true

같이, 따옴표없이 그것을 시도 할 것이다 그래서 같이 단순히

<FloatingActionButton 
    secondary={this.state.activeDayId === 1 ? true : false} 
    mini 
    onClick={() => this.setActiveDay(1)}> 
    S 
</FloatingActionButton> 

이상 :

<FloatingActionButton 
    secondary={this.state.activeDayId === 1} 
    mini 
    onClick={() => this.setActiveDay(1)}> 
    S 
</FloatingActionButton> 
+1

나는 당신의 더 쉬운 방법을 좋아합니다. 좋습니다. 그러나 버튼은 한 번만 전환됩니다. 내가 뭘 놓치고 있니? – LOTUSMS

+0

나는 당신의 예제에서 항상 id를 1로 설정하고 그것을 토글하지 않는다고 생각한다. 7 일 동안 7 개의 FloatingActionButton 구성 요소가 있습니까?그렇다면 각각의 FloatingActionButton은 유일한 id를 가져야하고'onClick' 액션은 주어진'FloatingActionButton' id를 그 상태로 설정해야합니다. – Nandito

+0

나는 그것을 시도했지만 단 하나의 토글을 유지합니다. 나는 일곱 가지 기능을 구축하지 않고 매일 독립적으로 일해야한다. – LOTUSMS