reactjs - 无法专注于 React 输入

标签 reactjs

在尝试专注于某个元素时遇到一些麻烦。我有一个映射数组函数,它会吐出带有输入的 html。可能有多个 id,所以我想将 ref 设置为“type”+ Id。两种可能的类型是 tasksubtask。当我尝试通过 this.refs.{refValue}.focus() 访问时,我得到一个 Cannot read property 'focus' of undefined

这是我的 jsx:

<input className="ui-input-text" type="text" ref="subTask + {subTask.Id}" onChange={this.handleSubTaskChange.bind(this, indx, idx)} value={subTask.Name} />

这里是我得到错误的地方

        var subTaskRef = 'subTask' + subTaskId;
        this.refs.subTaskRef.focus();

变量 subTaskId 是正确的,我已经验证过了。也许我设置的 ref 不正确?

编辑

按照@Ori Drori 的回答,这里有更多的代码:

class Tasks extends React.Component {
focusTasks: [],
focusSubTasks: [],
constructor(props) {
    super(props);

    this.state = {
        editableTasks: [],
        editableSubTasks: [], 

        tasks: [],
        subTasks: [],            
        plannerId: this.props.plannerId,
    };

    var state = this.state;


}

和(部分)我的渲染方法

render() {
    const tasks = this.state.tasks.map((task, idx) => {
        var editable = this.state.editableTasks.filter(id => id === task.Id).length > 0;
        var editableSubTasks = this.state.editableSubTasks;
        const subTaskComponents = task.SubTasks.map((subTask, indx) => 
            <li key={subTask.Id} className="list-group-item" style={{minHeight: '50px', border: 0, backgroundColor: 'rgba(127,191,63,.42)'}}>
                    <div className="pull-left" style={{width: '50%'}}>
                        <!-- Pay attention to this line -->{editableSubTasks.filter(id => id === subTask.Id).length > 0 ? <input className="ui-input-text" type="text" ref={ (ref) => this.focusSubTasks[subTask.Id] = ref }  onChange={this.handleSubTaskChange.bind(this, indx, idx)} value={subTask.Name} /> : <span>{subTask.Name}</span>}
                    </div>
                    <div className="pull-right" style={{marginTop: '-5px', width: '50%'}}>
                        <div className="pull-right">
                             <button className="btn btn-default" onClick={() => { this.EditSubTask(task.Id, subTask.Id)}}>{editableSubTasks.filter(id => id === subTask.Id).length > 0  ? <i className="fa fa-check"></i> : <i className="fa fa-pencil-square-o"></i>}</button>
                        </div>
                    </div>
            </li>
        );

这似乎是问题所在(不会建立)

enter image description here

最佳答案

最后只用了 jQuery,一行代码就容易多了。不确定我正在做的事情是否太复杂了,但我最终在输入上设置了一个 id,然后调用 $(el).focus() 来解决这个问题。除非有人有工作示例,否则我将更新此 SO。

关于reactjs - 无法专注于 React 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40695513/

相关文章:

javascript - 无法在几个备选方案之间弹跳的 React 中正确设置 PropTypes

javascript - 在功能组件之前添加 async 会导致它返回一个对象吗?

javascript - React/JSX 中的三元运算符不起作用

javascript - 使用 Javascript 的多线程请求

javascript - Next.js 无法识别 '@types/react'

reactjs - 如何在 Formik 中创建连接/依赖的选择元素?

javascript - 在 React 中设计 : avoid using redux store to propagate data from child to parent component?

reactjs - 在普通函数中使用 react navigation.navigate -(不允许 Hook ,即 useNavigation)?

javascript - 组件内的处理程序错误地调用了彼此的代码

javascript - 为 Jest 的每个测试文件指定 window.location