2

我想使用 React v16.0.0 上的新功能来返回一个字符串,然后在

<img src="returnedString" >

当前的行为是什么?

好吧,如果我将我的组件呈现在 <div > <MyComponent /> </div>

我可以看到屏幕上显示的字符串(见附件截图),但我的目标是在<img src="returnedString" />

这是我的代码:

// My component that returns strings
 class MyComponent extends Component {
   render(){

    switch (this.props.type) {
      case 'text':
        return this.props.json.data[this.props.Key]
        break
      case 'image':
        return this.props.json.data[this.props.Key]
        break
        default:
        return null
        break
    }
   }
 }

const UserComponent = (props) => {
  return (
    <div>
      {/* this displays the string on the page */}
      <MyComponent type='image' Key='avatar' desc='Abified image'  {...props} />

       {/* If I console.log this line I get <img src={[object object]} /> */}
       <img src={<MyComponent type='image' Key='avatar' desc='Abified image'  {...props} />} />
    </div>
   )
}

// Parent Component
class App extends Component {
constructor(props){
  super(props)
  this.state = {
   json:[]
  }
 }

 // Fetching data from an api
 componentDidMount(){
   fetch("https://reqres.in/api/users/2")
     .then(response => response.json())
     .then(json => {
       this.setState({json: json })
   })
 }

 render() {
 return (
   <div>
     <UserComponent {...this.state}/>
   </div>
  );
 }
}

export default App;

我怎样才能做到这一点?

预期的行为是什么?

我想在一个里面使用返回的字符串

哪些版本的 React ?

反应 v16.0.0

这在以前版本的 React 中有效吗?

不,因为它是 React v16.0.0 中的新功能

在此处输入图像描述

4

2 回答 2

1

如果要src动态设置图像的属性,请使用普通的 javascript 函数而不是组件:

const getImageSrc = props => {
    switch (props.type) {
      case 'text':
      case 'image':
        return props.json.data[props.Key]
    }
}

然后你可以render像这样从组件的方法中调用它:

<img src={ getImageSrc({...this.props, type: 'image', Key: 'avatar'}) } />
于 2017-09-27T03:03:59.620 回答
0

因为这

<MyComponent type='image' Key='avatar' desc='Abified image' />

在 dom中创建一个文本节点。

但在这种情况下

<img src={<MyComponent type='image' Key='avatar' desc='Abified image' {...props} />

您的 src 属性正在获取一个反应元素对象

你永远不会得到这样的字符串。如果你想src动态获取你的,试试这样的

const UserComponent = (props) => {
// calculate you src here
 const imageSrc = props.json.data['avatar'];
 return (
   <div> 
     <img src={ imageSrc } />
   </div> 
 )
}

希望这可以帮助。

于 2017-09-27T08:58:22.530 回答