我正在研究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'));
答案 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>
);
}
答案 1 :(得分:1)
我找到了满足要求的现成组件。如果要自定义,请仔细阅读源代码并根据需要进行调整。