<div id="app"></div>
function App() {
const [ dark, setDark ] = React.useState(null);
const updateDark = e => setDark(e.type === 'mouseover' ? e.currentTarget.id : null);
return (
<React.Fragment>
{[ 'left', 'right' ].map(n => (
<div
id={n}
key={n}
onMouseOver={updateDark}
onMouseLeave={updateDark}
className={dark && dark !== n ? 'dark' : ''}
></div>
))}
</React.Fragment>
);
}
ReactDOM.render(<App />, document.getElementById('app'));
if (novyna.lenght) {
в процессе экспериментов было установлено, что если написать в условии вообще какую-либо фигню, типа if(novyna.lenght=55), то новости выводятся как ни в чем не бывало
class News extends React.Component {
const News = ({ news }) =>
<div className="news">
{Array.isArray(news) && news.length
? news.map(n => (
<div key={n.id}>
<p className="news__author">{n.author}:</p>
<p className="news__text">{n.text}</p>
<hr/>
</div>
))
: <p>Нет</p>}
<strong>Всего новостей: {news.length}</strong>
</div>;
isBarMenuClicked: false, // эту переменную нужно передать
$emit('click')
, подписывайтесь на событие в родительском компоненте, переключайте там значение переменной, отвечающей за открытость меню и передавайте её в меню как параметр. return
?const events = [];
collectEvents:
for(let z = 0; z < arrOfEvents.length; z++){
return memo
заменяете наevents.push(memo);
continue collectEvents;
return events;
. .one path {
fill: #909090;
}
.one.active path {
fill: #f00;
}
const itemSelector = '.one';
const activeClass = 'active';
document.addEventListener('click', function(e) {
const el = e.target.closest(itemSelector);
if (el) {
el.classList.toggle(activeClass);
}
});
// или
document.querySelectorAll(itemSelector).forEach(function(n) {
n.addEventListener('click', this);
}, e => e.currentTarget.classList.toggle(activeClass));
state: {
date: null,
interval: null,
},
mutations: {
update(state) {
state.date = new Date();
},
start(state) {
if (!state.interval) {
state.interval = setInterval(this.commit, 1000, 'update');
}
},
stop(state) {
if (state.interval) {
clearInterval(state.interval);
state.interval = null;
}
},
},
computed: {
timerActive() {
return !!this.$store.state.interval;
},
timeStr() {
const { date } = this.$store.state;
return date instanceof Date
? [ 'getHours', 'getMinutes', 'getSeconds' ]
.map(n => `${date[n]()}`.padStart(2, 0))
.join(':')
: 'ВРЕМЕНИ НЕТ';
},
},
created() {
this.$store.commit('start');
},
<button @click="$store.commit('start')" :disabled="timerActive">start</button>
<button @click="$store.commit('stop')" :disabled="!timerActive">stop</button>
<div>{{ timeStr }}</div>
v-on="условие ? { событие: обработчик } : {}"
v-on="{ событие: условие ? обработчик : null }"
const result = arrs.reduce(
(acc, arr) => (arr.forEach((n, i) => acc[i].push(...n.slice(acc[i].length))), acc),
Array.from({ length: Math.max(...arrs.map(arr => arr.length)) }, () => [])
);
const result = arrs.reduce((acc, arr) => (
arr.forEach((n, i) => (
acc[i] = acc[i] || [],
n.forEach((m, j) => acc[i][j] = acc[i][j] || m)
)),
acc
), []);
хочу, чтобы модальное окно отображалось столько раз, сколько событий в дне, и каждый раз с подробной информацией о новом событии
computed: {
detailInformationOfEvent() {
return this.detailInformationOfEvents[0];
},
...
this.detailInformationOfEvents.push({
...
});
v-show="detailInformationOfEvent"
detailInformationOfEvents.shift()
Метод Performance.now()
возращает временную метку DOMHighResTimeStamp, измеряемую в миллисекундах
const createArr = (len, digit, count) => {
const d = [...Array(9)].map((n, i) => i + (i >= digit));
return [...Array(len)].map(() => {
const number = [...Array(Math.random() * 10 | 0)].map(() => d[Math.random() * d.length | 0]);
for (let i = 0; i < count; i++) {
number.splice(Math.random() * number.length | 0, 0, digit);
}
return +number.join('');
});
};
const arr = createArr(5, 1, 2);