gpt4 book ai didi

javascript - React - 在一种特定状态下更改 css 样式

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:36 25 4
gpt4 key购买 nike

我想做的是,如果输入值与 API 调用中的任何电影都不匹配,则将输入的边框更改为红色。用户在输入字段中键入内容,调用 API 显示匹配结果。如果我们没有任何结果,我希望输入的边框是红色的。但我看不出我应该如何做到这一点。

组件 Input 位于代码片段的末尾。

CSS

.input-style {
padding: 7px;
border-radius: 5px;
border: 1px solid #cccccc;
font-family: Courier New, Courier, monospace;
transition: background-color 0.3s ease-in-out;
outline: none;
}
.input-style:focus {
border: 1px solid turquoise;
}

APP.js

class App extends Component {
constructor() {
super();

this.state = {
value: '',
items: [],
isLoading: false,
searchResult: null,
error: false,
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}

// To handle search
handleChange(e) {
this.setState({ value: e.target.value });
}
handleSubmit(e) {
let searchResult = [];
for (var i = 0; i < this.state.items.length; i++) {
if (
this.state.items[i].name
.toLowerCase()
.indexOf(this.state.value.toLowerCase()) !== -1
) {
searchResult.push(this.state.items[i]);
} else {
console.log('No matches on your search, try again');
}
}
e.preventDefault();

// If we have something in the object searchResult
if (searchResult.length > 0) {
this.setState({
error: false,
value: '',
searchResult: searchResult,
});
} else {
this.setState({
error: true,
value: '',
searchResult: [],
});
}
}

// call to the API
componentDidMount() {
this.setState({ isLoading: !this.state.isLoading });
fetch('https://api.tvmaze.com/shows')
.then(response => response.json())
.then(data => {
this.setState({
items: data,
error: false,
});
this.setState({ isLoading: !this.state.isLoading });
})
.catch(console.error);
}

render() {
return (
<div className="App">
<Header />

<Loader isLoading={this.state.isLoading} />

<Input
handleChange={this.handleChange}
handleSubmit={this.handleSubmit}
value={this.state.value}
/>

{this.state.error ? (
<p className="errorMsg">No match on the search, try again!</p>
) : null}

<Search search={this.state.searchResult} />
</div>
);
}
}

export default App;

Input.js

function Input(props) {
return (
<div>
<form onSubmit={props.handleSubmit}>
<input
type="text"
className="input-style"
placeholder="Sök efter film.."
value={props.value}
onChange={props.handleChange}
/>

<button id="bold" className="button-style" type="submit">
<i className="fa fa-search" />
</button>
</form>
</div>
);
}
export default Input;

最佳答案

您可以将错误从 App

传递到 Input 组件
<Input
handleChange={this.handleChange}
handleSubmit={this.handleSubmit}
value={this.state.value}
error={this.state.error)
/>

在你的 Input 组件中:

 <input
type="text"
className={props.error ? 'error-input-style' : 'input-style'}
placeholder="Sök efter film.."
value={props.value}
onChange={props.handleChange}
/>

您还可以为错误情况设置内联样式:

 <input
type="text"
className="input-style"
placeholder="Sök efter film.."
value={props.value}
onChange={props.handleChange}
style={{ border: props.error ? '1px solid red' : '' }}
/>

关于javascript - React - 在一种特定状态下更改 css 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50942338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com