在React中突出显示搜索到的文本

时间:2019-03-19 19:21:06

标签: javascript reactjs react-native

我正在研究React,实现了过滤器功能之后,我开始考虑如何在搜索到的字符串中突出显示匹配的单词。

我的App.js是:

import React, { Component } from 'react';
import ListValues from './ListValues';

class App extends Component {
  state = { 
    list: ['First string 1', 'second String 2', 'third string 3', 'teste rwe'],
    value: ''
   }

  render() { 
    return ( 
      <div>
        <input 
          value={this.state.value}
          onChange={e => this.setState({ value: e.target.value })} 
        />
        <ListValues list={this.state.list} value={this.state.value}/>
      </div> 
    );
  }
}

export default App;

我的ListValues.js文件是:

import React from 'react';

const ListValues = (props) => {
    return ( 
        <div>
          <ul>
              {props.list.filter(name => {
                return name.toLowerCase().indexOf(props.value.toLowerCase()) >= 0;
              }).map((value, i) => {
                return <li key={i}>{value}</li>
              })}
          </ul>
        </div>
     );
}

export default ListValues;

index.js文件是标准代码:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './components/App';

ReactDOM.render(<App />, document.getElementById('root'));

2 个答案:

答案 0 :(得分:1)

除非我在这里没有指出要点,否则您可以使用样式化组件根据传递到组件中的props的值,有条件地应用样式(背景色)。

import styled from 'styled-components'

const ListValue = styled.li`
  ${({ active }) => active && `
    background: blue;
  `}
`;

const ListValues = (props) => {
    return ( 
        <div>
          <ul>
              {props.list.filter(name => {
                return name.toLowerCase().indexOf(props.value.toLowerCase()) >= 0;
              }).map((value, i) => {
                return <ListValue active={true} key={i}>{value}</ListValue>
              })}
          </ul>
        </div>
     );
}

https://www.styled-components.com/docs

答案 1 :(得分:1)

我找到了满足要求的现成组件。如果要自定义,请仔细阅读源代码并根据需要进行调整。

react-highlight-words