2015-03-11 17 views
7

Tôi có thanh tiến trình mà tôi đang xây dựng trong React.js và Zurb Foundation mà tôi muốn phản ánh trạng thái hiện tại. Tôi hiểu rằng trong đầu tôi có thể thiết lập độ rộng với một cái gì đó như thế này:React.js: cách tạo kiểu nội tuyến tự động cập nhật thanh tiến trình về thay đổi trạng thái

render: function() { 
    var spanPercent = (this.props.a - this.props.b)/this.props.a + '%'; 
    var spanStyle = { 
     width: spanPercent 
    }; 
    return (
     <div className="progress"> 
      <span className="meter" style={spanStyle}></span> 
     </div> 
    ); 
} 
tuy nhiên

, khi giá trị của đạo cụ thay đổi do sự thay đổi trạng thái, phong cách inline không cập nhật mặc dù những thay đổi giá trị đạo cụ . Có cách nào tốt nhất để thực hiện việc này, chẳng hạn như sử dụng gọi lại hoặc đặt mã ở một nơi khác không? Tôi sẽ đánh giá cao sự giúp đỡ nào!

+0

"khi giá trị của đạo cụ thay đổi do sự thay đổi trạng thái" --- điều này có thực sự nghĩa là gì? – zerkms

+0

Xin lỗi, tôi muốn nói rằng dữ liệu từ cơ sở dữ liệu mà từ đó this.props.a được thiết lập thay đổi. Tôi cũng sẽ tối ưu cập nhật giá trị của this.props.a trước khi cuộc gọi ajax trở lại – bryant

+1

Thông thường bạn có thể đăng ký những thay đổi đó và sử dụng 'setState' để thay đổi trạng thái. – zerkms

Trả lời

7

Một giải pháp là đặt khóa của phần trăm trên phần tử bạn muốn cập nhật. Bằng cách đó khi phản ứng kiểm tra để xem những gì trong DOM đã thay đổi nó thấy rằng khóa đã thay đổi và do đó sẽ xây dựng lại DOM cho phần tử đó.

Xem ví dụ dưới đây:

render: function() { 
    var spanPercent = (this.props.a - this.props.b)/this.props.a + '%'; 
    var spanStyle = { 
      width: spanPercent 
     }; 
    return (
     <div className="progress"> 
     <span key={spanPercent} className="meter" style={spanStyle}></span> 
     </div> 
); 

}

+2

React không kiểm tra các thay đổi thuộc tính phong cách trong DOM diff algo hay cái gì đó? Câu trả lời này có hiệu quả đối với tôi, nhưng tôi vẫn còn bối rối về lý do tại sao hành vi này lại xuất hiện. – ccnokes

+0

@ccnokes Tôi đồng ý. Họ dường như can thiệp bạn từ "cập nhật bằng tay" nhưng sau đó bạn nhận được kết quả lạ như thế này khiến bạn không tin tưởng vào khung công tác. –

Các vấn đề liên quan