indexOf()
, который возвращает -1
если не найдено, или индекс от 0
и больше.-1
или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ }
но иногда хочется короче.~
хорош тем, что выделяет -1
: только -1
с этим оператором даст 0
. Прочие числа дадут какое-то ненулевое значение.~(-1) === 0
0
и больше получилось тоже ненулевое число, и !!
даст true
-1
получится уникальный 0
, и !!0
вернёт false
Были классы, были HOC
компоненты разделены на Container/Component или Умный и Глупый
И если жить с хуками только React еще можно, но когда проект не демонстрационный, а реальный, то подключено еще кучу различных библиотек, у каждой второй есть хуки, в итоге все перемешано.
Далее философия Redux, "не диспатчить actions напрямую", все через actions creator и тп и тд, сейчас нам просто предоставляется dispatch из useDispatch()
Раньше можно было взять компонент, передать props и быть довольным.
В итоге, я не понимаю куда все идет, почему уходят с классов (удобных, понятных, структурированных) на функциональные компоненты с хуками?
@function max($numbers...) {
@return m#{a}x(#{$numbers});
}
@function min($numbers...) {
@return m#{i}n(#{$numbers});
}
Компоненты в Реакте делятся на несколько основных групп (напишите где ошибаюсь):
Update from 2019: I wrote this article a long time ago and my views have since evolved. In particular, I don’t suggest splitting your components like this anymore.
Если мы хотим чтобы шапка была серая, куда писать этот стиль?
const [data, setData] = useState(null);
useEffect(() => {
const controller = new AbortController()
fetchData(controller.signal).then(setData)
return () => controller.abort()
}, [fetchData, setData])
const data = useMemo(() => array.map(mapper).filter(predicate).reduce(reducer), [array])
const handler = useCallback(() => {
// что-то сделать
}, [])
useEffect(() => {
handler(value)
// если не использовать useCallback, эффект будет срабатывать постоянно
}, [handler, value])
function VKaddGoodsOnMarket ($name,$description,$category_id,$price,$photourl) {
$vkToken = '';
$vkGroupID = '';
$vkVersionAPI = '5.60';
//Получаем ссылку для загрузки фото
$GET_getMarketUploadServer = [
'group_id' => $vkGroupID,
'main_photo' => 1,
'access_token' => $vkToken,
'v' => $vkVersionAPI
];
$resukt_url_dp = json_decode(file_get_contents('https://api.vk.com/method/photos.getMarketUploadServer?'.http_build_query($GET_getMarketUploadServer)), TRUE);
//Загружаем фото КУРЛом, отправляя ПОСТ на полученю ссылку
$curl_file = curl_file_create($photourl,'image/jpeg','test_name.jpg');
$ch=curl_init();
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $resukt_url_dp['response']['upload_url'],
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array("photo" => $curl_file)
));
//Получим массив с хешем и прочим
$img_attach = json_decode(curl_exec($ch), true);
//Сохраняем фоточку отпрявляя ГЕТ запрос в ВК
$GET_saveMarketPhoto = [
'group_id' => $vkGroupID,
'photo' => stripslashes($img_attach['photo']),
'server' => $img_attach['server'],
'hash' => $img_attach['hash'],
'crop_data' => $img_attach['crop_data'],
'crop_hash' => $img_attach['crop_hash'],
'access_token' => $vkToken,
'v' => $vkVersionAPI
];
$photo = json_decode(file_get_contents('https://api.vk.com/method/photos.saveMarketPhoto?'.http_build_query($GET_saveMarketPhoto)), TRUE);
$photoGoods = $photo['response'][0]['id'];
$GET_marketadd = [
'owner_id' => '-'.$vkGroupID.'',
'name' => $name,
'description' => $description,
'category_id' => $category_id,
'price' => $price,
'main_photo_id' => $photoGoods,
'access_token' => $vkToken,
'v' => $vkVersionAPI
];
$addMarket = json_decode(file_get_contents('https://api.vk.com/method/market.add?'.http_build_query($GET_marketadd)), TRUE);
return $addMarket;
}