我正試圖在onClick中重點/突出顯示輸入文字onClick。它按預期工作,但只在渲染數組的最後一個元素上。我嘗試了幾種不同的方法,但他們都做了完全相同的事情。這裏是什麼,我有兩個例子:Reactjs - 在動態元素渲染中添加ref輸入
export default class Services extends Component {
handleFocus(event) {
event.target.select()
}
handleClick() {
this.textInput.focus()
}
render() {
return (
<div>
{element.sources.map((el, i) => (
<List.Item key={i}>
<Segment style={{marginTop: '0.5em', marginBottom: '0.5em'}}>
<Input fluid type='text'
onFocus={this.handleFocus}
ref={(input) => { this.textInput = input }}
value='text to copy'
action={
<Button inverted color='blue' icon='copy' onClick={() => this.handleClick}></Button>
}
/>
</Segment>
</List.Item>
))}
</div>
)
}
如果只有一個被渲染的元素,它的重點在輸入文本,但是如果有多個元素,每個元素的按一下按鈕只選擇最後一個元素的輸入。這裏有另外一個例子:
export default class Services extends Component {
constructor(props) {
super(props)
this._nodes = new Map()
this._handleClick = this.handleClick.bind(this)
}
handleFocus(event) {
event.target.select()
}
handleClick(e, i) {
const node = this._nodes.get(i)
node.focus()
}
render() {
return (
<div>
{element.sources.map((el, i) => (
<List.Item key={i}>
<Segment style={{marginTop: '0.5em', marginBottom: '0.5em'}}>
<Input fluid type='text'
onFocus={this.handleFocus}
ref={c => this._nodes.set(i, c)}
value='text to copy'
action={
<Button inverted color='blue' icon='copy' onClick={e => this.handleClick(e, i)}></Button>
}
/>
</Segment>
</List.Item>
))}
</div>
)
}
這兩種方法基本上都有相同的響應方式。我需要handleClick輸入焦點爲每個動態呈現的元素工作。任何意見是極大的讚賞。提前致謝!
的Input
組件從語義UI進口沒有額外的實現作出反應,我的應用程序
UPDATE 謝謝你們爲偉大的答案。這兩種方法在單個循環元素渲染中都很有效,但現在我試圖用多個父元素來實現它。例如:
import React, { Component } from 'react'
import { Button, List, Card, Input, Segment } from 'semantic-ui-react'
export default class ServiceCard extends Component {
handleFocus(event) {
event.target.select()
}
handleClick = (id) => (e) => {
this[`textInput${id}`].focus()
}
render() {
return (
<List divided verticalAlign='middle'>
{this.props.services.map((element, index) => (
<Card fluid key={index}>
<Card.Content>
<div>
{element.sources.map((el, i) => (
<List.Item key={i}>
<Segment>
<Input fluid type='text'
onFocus={this.handleFocus}
ref={input => { this[`textInput${i}`] = input }}
value='text to copy'
action={
<Button onClick={this.handleClick(i)}></Button>
}
/>
</Segment>
</List.Item>
))}
</div>
</Card.Content>
</Card>
))}
</List>
)
}
現在,在修改後的代碼,你的方法工作了,一個Card
元素,但是當有多個Card
元素,它仍然只適用於最後一個。 Input
Buttons
分別適用於它們的輸入,但僅在最後的Card
元素呈現。
[React Select映射問題]的可能重複(https://stackoverflow.com/questions/46467577/react-select-mapping-issue) – bennygenel
它的不同之處在於,輸入上的其他方法對每個元素都能正常工作除了handleClick。 ref只選擇最後一個呈現的元素,沒有其他元素。 – merrilj
@MerrilJeffs第二個代碼將按預期工作。第二個代碼在控制檯上是否出現錯誤? –