React JSX'teki tekliflerin içindeki desteklere erişin


295

JSX'te, propsalıntılanan öznitelik değerinin içinden bir değere nasıl başvuruyorsunuz ?

Örneğin:

<img className="image" src="images/{this.props.image}" />

Ortaya çıkan HTML çıktısı:

<img class="image" src="images/{this.props.image}">

Yanıtlar:


476

React (veya JSX), bir öznitelik değeri içinde değişken enterpolasyonu desteklemez, ancak herhangi bir JS ifadesini öznitelik değerinin tamamına öznitelik değeri olarak koyabilirsiniz, bu nedenle:

<img className="image" src={"images/" + this.props.image} />

26
es6'daki ipuçlarına ne dersiniz?
David Lavieri

1
@DavidLavieri Cristi'nin aşağıdaki stackoverflow.com/a/30061326/70345 yanıtına bakın .
Ian Kemp


47

Harmony ile JSX kullanıyorsanız, bunu yapabilirsiniz:

<img className="image" src={`images/${this.props.image}`} />

Burada srcbir ifade olarak değerini yazıyorsunuz .


1
bu bulmak zor bir şey. ve yeniden kullanılabilir kaplar için bu bir zorunluluktur
holms

2
İnsanların Harmony'den bahsetmeyle karıştırılmaması için, bu ES6 standardının bir parçasıdır , ancak cevap standart hale gelmeden birkaç ay öncesine aittir .
Сергей Гринько

12

Değişkenler ve dizeler eklemek yerine ES6 şablon dizelerini kullanabilirsiniz! İşte bir örnek:

<img className="image" src={`images/${this.props.image}`} />

JSX içindeki diğer tüm JavaScript bileşenlerine gelince, süslü parantezlerin içindeki şablon dizelerini kullanın. Bir değişkeni "enjekte etmek" için dolar işareti ve ardından enjekte etmek istediğiniz değişkeni içeren süslü parantez kullanın. Örneğin:

{`string ${variable} another string`}

8

Bunun için en iyi uygulamalar getter yöntemini eklemektir:

getImageURI() {
  return "images/" + this.props.image;
}

<img className="image" src={this.getImageURI()} />

Daha sonra daha fazla mantığınız varsa, kodu sorunsuz bir şekilde koruyabilirsiniz.



1

Not: Reaksiyonda javascript ifadesini kıvırcık parantez içine alabilirsiniz. Bu özelliği bu örnekte kullanabiliriz.
Not: aşağıdaki örneğe bir göz atın:

class LoginForm extends React.Component {

  constructor(props) {
    super(props);

    this.state = {i:1};
  }

  handleClick() {
    this.setState(prevState => ({i : prevState.i + 1}));

    console.log(this.state.j);  
  }


  render() {

    return (
      <div>
        <p onClick={this.handleClick.bind(this)}>Click to change image</p>
        <img src={'images/back'+ this.state.i+'.jpg'}/>
      </div>
      );

  }
}

1

İşte Dinamik className veya Props için En İyi Seçenek, sadece Javascript'te yaptığımız gibi birleştirme yapın.

     className={
        "badge " +
        (this.props.value ? "badge-primary " : "badge-danger ") +
        " m-4"
      }

classnamesDinamik
sınıf

1

kullanabilirsiniz

<img className="image" src=`images/${this.props.image}`>

veya

<img className="image" src={'images/'+this.props.image}>

veya

  render() {
         let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
    return (
       <div>
          <img className="image" src={imageUrl} />
       </div>
    )
  }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.