onMouseDown(e) {
e.preventDefault();
}
onMouseDown={this.onMouseDown}
onClick={ this.setState({isOpen: !this.state.isOpen}) }
Обращался к API в componentDidMount() и отправлял в стейт, но это вызывает перерендеринг компонента и в доках считается нежелательно.
You should populate data with AJAX calls in the componentDidMount lifecycle method. This is so you can use setState to update your component when the data is retrieved.
isBlockNavButtons
отвечает за логику disable для тех кнопок. То есть если у нас элемент последний или первый, то мы блочим нужную нам кнопку.
dispatch({
type: `${CREATE_QUESTION}_BLOCK_BUTTON`,
payload: {
blockPreviousButton: elementIndex === 0,
blockNextButton: elementIndex === data.length - 1,
},
});
shouldComponentUpdate(nextProps, nextState) {
return !this.state.updatesLocked || !nextState.updatesLocked;
}
Может кто-нибудь подсказать почему так происходит и как исправить?
class AddItems extends React.Component {
state = {
value: '',
items: [],
}
inputChange = ({ target: { value } }) => {
this.setState({ value });
}
addNewItem = () => {
if (this.state.value) {
this.setState({
items: [ ...this.state.items, {
text: this.state.value,
id: (new Date()).getTime().toString(),
} ],
value: '',
});
}
}
render() {
return (
<div className="addItems">
<div className="addSection">
<input type="text" value={this.state.value} onChange={this.inputChange} />
<input type="submit" onClick={this.addNewItem} />
</div>
<div className="listSection">
<ul>{this.state.items.map((item) => <li key={item.id}>{item.text}</li>)}</ul>
</div>
</div>
)
}
}
тег должен меняться,а не добавляться, как по дефолту сейчас
Нормальное ли разделение компонентов
правильно ли делать такие передачи props??
Обновить не вариант, в проекте этот юзается(
Слишком много надо будет переписывать
class App extends React.Component {
state = {
value: '',
}
onChange = ({ target: { value } }) => {
this.setState({ value });
}
render() {
const name = this.state.value.split(/\s+/);
return (
<div>
<input onChange={this.onChange} />
<p>Ф: {name[0]}</p>
<p>И: {name[1]}</p>
<p>О: {name[2]}</p>
{name[3] && <p>WTF??! {name.slice(3)}</p>}
</div>
);
}
}
При нажатии на svg, event.target присваивается конкретным элементам - картинка внутри svg, текст, фигура итд.
event.target.closest('svg')
Допустим я нашел нужный эл-т, и вижу в console.log нужный атрибут, но если вызвать его напрямую, возвращается undefined
card.getAttribute('stroke')
onClickFuagra = () => {
this.setState({
strokeFuagra: '...',
});
}
onClickFish = () => {
this.setState({
strokeFish: '...',
});
}
<Samy svgXML={fuagra} onClick={this.onClickFuagra}>
...
</Samy>
<Samy svgXML={fish} onClick={this.onClickFish}>
...
</Samy>
onClick = e => {
const svg = e.target.closest('svg');
this.setState({
[имя свойства зависит от svg, как определить по кому был клик - думайте сами]: '...',
});
}
<div className="banners" onClick={this.onClick}>
...
onKeyDown = e => {
if (e.key === 'Tab') {
e.preventDefault();
const
input = e.target,
str = input.value,
currPos = input.selectionStart,
wordEnd = str.slice(currPos).search(/[^\w]/);
let pos = str.slice(currPos + wordEnd).search(/[^\s]/);
if (pos) {
pos += currPos + wordEnd;
}
if (pos === currPos) {
pos = 0;
}
input.setSelectionRange(pos, pos);
}
}
<input value={this.state.str} onKeyDown={this.onKeyDown} />